summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--apps/admin_audit/composer/autoload.php7
-rw-r--r--apps/admin_audit/composer/composer.json13
-rw-r--r--apps/admin_audit/composer/composer/ClassLoader.php445
-rw-r--r--apps/admin_audit/composer/composer/LICENSE21
-rw-r--r--apps/admin_audit/composer/composer/autoload_classmap.php20
-rw-r--r--apps/admin_audit/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/admin_audit/composer/composer/autoload_psr4.php10
-rw-r--r--apps/admin_audit/composer/composer/autoload_real.php52
-rw-r--r--apps/admin_audit/composer/composer/autoload_static.php46
-rw-r--r--apps/comments/.bowerrc3
-rw-r--r--apps/comments/appinfo/app.php1
-rw-r--r--apps/comments/appinfo/info.xml6
-rw-r--r--apps/comments/composer/autoload.php7
-rw-r--r--apps/comments/composer/composer.json13
-rw-r--r--apps/comments/composer/composer/ClassLoader.php445
-rw-r--r--apps/comments/composer/composer/LICENSE21
-rw-r--r--apps/comments/composer/composer/autoload_classmap.php20
-rw-r--r--apps/comments/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/comments/composer/composer/autoload_psr4.php10
-rw-r--r--apps/comments/composer/composer/autoload_real.php52
-rw-r--r--apps/comments/composer/composer/autoload_static.php46
-rw-r--r--apps/comments/css/autocomplete.scss77
-rw-r--r--apps/comments/css/comments.css19
-rw-r--r--apps/comments/js/commentstabview.js310
-rw-r--r--apps/comments/js/merged.json4
-rw-r--r--apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js1
-rw-r--r--apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js2
-rw-r--r--apps/comments/l10n/es_CR.js34
-rw-r--r--apps/comments/l10n/es_CR.json32
-rw-r--r--apps/comments/l10n/es_DO.js34
-rw-r--r--apps/comments/l10n/es_DO.json32
-rw-r--r--apps/comments/lib/Activity/Provider.php6
-rw-r--r--apps/comments/lib/AppInfo/Application.php5
-rw-r--r--apps/comments/lib/Collaboration/CommentersSorter.php115
-rw-r--r--apps/comments/lib/JSSettingsHelper.php45
-rw-r--r--apps/comments/tests/Unit/Collaboration/CommentersSorterTest.php160
-rw-r--r--apps/comments/tests/Unit/JSSettingsHelperTest.php73
-rw-r--r--apps/comments/tests/js/commentstabviewSpec.js15
-rw-r--r--apps/dav/composer/autoload.php7
-rw-r--r--apps/dav/composer/composer.json13
-rw-r--r--apps/dav/composer/composer/ClassLoader.php445
-rw-r--r--apps/dav/composer/composer/LICENSE21
-rw-r--r--apps/dav/composer/composer/autoload_classmap.php145
-rw-r--r--apps/dav/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/dav/composer/composer/autoload_psr4.php10
-rw-r--r--apps/dav/composer/composer/autoload_real.php52
-rw-r--r--apps/dav/composer/composer/autoload_static.php171
-rw-r--r--apps/dav/l10n/bg.js2
-rw-r--r--apps/dav/l10n/bg.json2
-rw-r--r--apps/dav/l10n/ca.js2
-rw-r--r--apps/dav/l10n/ca.json2
-rw-r--r--apps/dav/l10n/cs.js2
-rw-r--r--apps/dav/l10n/cs.json2
-rw-r--r--apps/dav/l10n/da.js2
-rw-r--r--apps/dav/l10n/da.json2
-rw-r--r--apps/dav/l10n/de.js2
-rw-r--r--apps/dav/l10n/de.json2
-rw-r--r--apps/dav/l10n/de_DE.js2
-rw-r--r--apps/dav/l10n/de_DE.json2
-rw-r--r--apps/dav/l10n/el.js2
-rw-r--r--apps/dav/l10n/el.json2
-rw-r--r--apps/dav/l10n/en_GB.js7
-rw-r--r--apps/dav/l10n/en_GB.json7
-rw-r--r--apps/dav/l10n/es.js7
-rw-r--r--apps/dav/l10n/es.json7
-rw-r--r--apps/dav/l10n/es_AR.js2
-rw-r--r--apps/dav/l10n/es_AR.json2
-rw-r--r--apps/dav/l10n/es_CO.js5
-rw-r--r--apps/dav/l10n/es_CO.json5
-rw-r--r--apps/dav/l10n/es_CR.js52
-rw-r--r--apps/dav/l10n/es_CR.json50
-rw-r--r--apps/dav/l10n/es_DO.js52
-rw-r--r--apps/dav/l10n/es_DO.json50
-rw-r--r--apps/dav/l10n/es_MX.js5
-rw-r--r--apps/dav/l10n/es_MX.json5
-rw-r--r--apps/dav/l10n/fi.js2
-rw-r--r--apps/dav/l10n/fi.json2
-rw-r--r--apps/dav/l10n/fr.js2
-rw-r--r--apps/dav/l10n/fr.json2
-rw-r--r--apps/dav/l10n/hu.js2
-rw-r--r--apps/dav/l10n/hu.json2
-rw-r--r--apps/dav/l10n/is.js2
-rw-r--r--apps/dav/l10n/is.json2
-rw-r--r--apps/dav/l10n/it.js2
-rw-r--r--apps/dav/l10n/it.json2
-rw-r--r--apps/dav/l10n/ko.js2
-rw-r--r--apps/dav/l10n/ko.json2
-rw-r--r--apps/dav/l10n/lt_LT.js2
-rw-r--r--apps/dav/l10n/lt_LT.json2
-rw-r--r--apps/dav/l10n/nb.js2
-rw-r--r--apps/dav/l10n/nb.json2
-rw-r--r--apps/dav/l10n/nl.js2
-rw-r--r--apps/dav/l10n/nl.json2
-rw-r--r--apps/dav/l10n/pl.js2
-rw-r--r--apps/dav/l10n/pl.json2
-rw-r--r--apps/dav/l10n/pt_BR.js2
-rw-r--r--apps/dav/l10n/pt_BR.json2
-rw-r--r--apps/dav/l10n/ro.js2
-rw-r--r--apps/dav/l10n/ro.json2
-rw-r--r--apps/dav/l10n/ru.js2
-rw-r--r--apps/dav/l10n/ru.json2
-rw-r--r--apps/dav/l10n/sk.js7
-rw-r--r--apps/dav/l10n/sk.json7
-rw-r--r--apps/dav/l10n/sq.js2
-rw-r--r--apps/dav/l10n/sq.json2
-rw-r--r--apps/dav/l10n/sr.js2
-rw-r--r--apps/dav/l10n/sr.json2
-rw-r--r--apps/dav/l10n/sv.js2
-rw-r--r--apps/dav/l10n/sv.json2
-rw-r--r--apps/dav/l10n/tr.js2
-rw-r--r--apps/dav/l10n/tr.json2
-rw-r--r--apps/dav/l10n/zh_CN.js2
-rw-r--r--apps/dav/l10n/zh_CN.json2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Backend.php66
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Base.php28
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Calendar.php60
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Event.php30
-rw-r--r--apps/dav/lib/CalDAV/Activity/Provider/Todo.php34
-rw-r--r--apps/dav/lib/CalDAV/CalendarObject.php52
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/BackendTest.php8
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php36
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php180
-rw-r--r--apps/encryption/composer/autoload.php7
-rw-r--r--apps/encryption/composer/composer.json13
-rw-r--r--apps/encryption/composer/composer/ClassLoader.php445
-rw-r--r--apps/encryption/composer/composer/LICENSE21
-rw-r--r--apps/encryption/composer/composer/autoload_classmap.php36
-rw-r--r--apps/encryption/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/encryption/composer/composer/autoload_psr4.php10
-rw-r--r--apps/encryption/composer/composer/autoload_real.php52
-rw-r--r--apps/encryption/composer/composer/autoload_static.php62
-rw-r--r--apps/encryption/l10n/es_CR.js65
-rw-r--r--apps/encryption/l10n/es_CR.json63
-rw-r--r--apps/encryption/l10n/es_DO.js65
-rw-r--r--apps/encryption/l10n/es_DO.json63
-rw-r--r--apps/encryption/l10n/eu.js32
-rw-r--r--apps/encryption/l10n/eu.json32
-rw-r--r--apps/federatedfilesharing/composer/autoload.php7
-rw-r--r--apps/federatedfilesharing/composer/composer.json13
-rw-r--r--apps/federatedfilesharing/composer/composer/ClassLoader.php445
-rw-r--r--apps/federatedfilesharing/composer/composer/LICENSE21
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_classmap.php21
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_psr4.php10
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_real.php52
-rw-r--r--apps/federatedfilesharing/composer/composer/autoload_static.php47
-rw-r--r--apps/federatedfilesharing/l10n/es_CR.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_CR.json56
-rw-r--r--apps/federatedfilesharing/l10n/es_DO.js58
-rw-r--r--apps/federatedfilesharing/l10n/es_DO.json56
-rw-r--r--apps/federatedfilesharing/l10n/sk.js58
-rw-r--r--apps/federatedfilesharing/l10n/sk.json56
-rw-r--r--apps/federation/composer/autoload.php7
-rw-r--r--apps/federation/composer/composer.json13
-rw-r--r--apps/federation/composer/composer/ClassLoader.php445
-rw-r--r--apps/federation/composer/composer/LICENSE21
-rw-r--r--apps/federation/composer/composer/autoload_classmap.php23
-rw-r--r--apps/federation/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/federation/composer/composer/autoload_psr4.php10
-rw-r--r--apps/federation/composer/composer/autoload_real.php52
-rw-r--r--apps/federation/composer/composer/autoload_static.php49
-rw-r--r--apps/federation/l10n/es_CR.js16
-rw-r--r--apps/federation/l10n/es_CR.json14
-rw-r--r--apps/federation/l10n/es_DO.js16
-rw-r--r--apps/federation/l10n/es_DO.json14
-rw-r--r--apps/federation/l10n/eu.js16
-rw-r--r--apps/federation/l10n/eu.json14
-rw-r--r--apps/federation/l10n/sk.js16
-rw-r--r--apps/federation/l10n/sk.json14
-rw-r--r--apps/files/composer/autoload.php7
-rw-r--r--apps/files/composer/composer.json13
-rw-r--r--apps/files/composer/composer/ClassLoader.php445
-rw-r--r--apps/files/composer/composer/LICENSE21
-rw-r--r--apps/files/composer/composer/autoload_classmap.php36
-rw-r--r--apps/files/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files/composer/composer/autoload_real.php52
-rw-r--r--apps/files/composer/composer/autoload_static.php62
-rw-r--r--apps/files/css/files.scss12
-rw-r--r--apps/files/js/tagsplugin.js6
-rw-r--r--apps/files/l10n/en_GB.js4
-rw-r--r--apps/files/l10n/en_GB.json4
-rw-r--r--apps/files/l10n/es.js4
-rw-r--r--apps/files/l10n/es.json4
-rw-r--r--apps/files/l10n/es_CO.js4
-rw-r--r--apps/files/l10n/es_CO.json4
-rw-r--r--apps/files/l10n/es_CR.js164
-rw-r--r--apps/files/l10n/es_CR.json162
-rw-r--r--apps/files/l10n/es_DO.js164
-rw-r--r--apps/files/l10n/es_DO.json162
-rw-r--r--apps/files/l10n/es_MX.js4
-rw-r--r--apps/files/l10n/es_MX.json4
-rw-r--r--apps/files/l10n/eu.js10
-rw-r--r--apps/files/l10n/eu.json10
-rw-r--r--apps/files/l10n/nl.js4
-rw-r--r--apps/files/l10n/nl.json4
-rw-r--r--apps/files/l10n/sk.js4
-rw-r--r--apps/files/l10n/sk.json4
-rw-r--r--apps/files_external/l10n/es_CR.js134
-rw-r--r--apps/files_external/l10n/es_CR.json132
-rw-r--r--apps/files_external/l10n/es_DO.js134
-rw-r--r--apps/files_external/l10n/es_DO.json132
-rw-r--r--apps/files_external/l10n/sk.js58
-rw-r--r--apps/files_external/l10n/sk.json58
-rw-r--r--apps/files_sharing/appinfo/info.xml6
-rw-r--r--apps/files_sharing/composer/autoload.php2
-rw-r--r--apps/files_sharing/composer/composer.json3
-rw-r--r--apps/files_sharing/composer/composer/autoload_classmap.php1
-rw-r--r--apps/files_sharing/composer/composer/autoload_real.php8
-rw-r--r--apps/files_sharing/composer/composer/autoload_static.php9
-rw-r--r--apps/files_sharing/css/mobile.scss13
-rw-r--r--apps/files_sharing/css/public.scss43
-rw-r--r--apps/files_sharing/js/public.js24
-rw-r--r--apps/files_sharing/l10n/ast.js2
-rw-r--r--apps/files_sharing/l10n/ast.json2
-rw-r--r--apps/files_sharing/l10n/ca.js4
-rw-r--r--apps/files_sharing/l10n/ca.json4
-rw-r--r--apps/files_sharing/l10n/cs.js4
-rw-r--r--apps/files_sharing/l10n/cs.json4
-rw-r--r--apps/files_sharing/l10n/de.js4
-rw-r--r--apps/files_sharing/l10n/de.json4
-rw-r--r--apps/files_sharing/l10n/de_DE.js4
-rw-r--r--apps/files_sharing/l10n/de_DE.json4
-rw-r--r--apps/files_sharing/l10n/el.js4
-rw-r--r--apps/files_sharing/l10n/el.json4
-rw-r--r--apps/files_sharing/l10n/en_GB.js4
-rw-r--r--apps/files_sharing/l10n/en_GB.json4
-rw-r--r--apps/files_sharing/l10n/es.js4
-rw-r--r--apps/files_sharing/l10n/es.json4
-rw-r--r--apps/files_sharing/l10n/es_AR.js4
-rw-r--r--apps/files_sharing/l10n/es_AR.json4
-rw-r--r--apps/files_sharing/l10n/es_CO.js4
-rw-r--r--apps/files_sharing/l10n/es_CO.json4
-rw-r--r--apps/files_sharing/l10n/es_CR.js115
-rw-r--r--apps/files_sharing/l10n/es_CR.json113
-rw-r--r--apps/files_sharing/l10n/es_DO.js115
-rw-r--r--apps/files_sharing/l10n/es_DO.json113
-rw-r--r--apps/files_sharing/l10n/es_MX.js4
-rw-r--r--apps/files_sharing/l10n/es_MX.json4
-rw-r--r--apps/files_sharing/l10n/fi.js4
-rw-r--r--apps/files_sharing/l10n/fi.json4
-rw-r--r--apps/files_sharing/l10n/fr.js4
-rw-r--r--apps/files_sharing/l10n/fr.json4
-rw-r--r--apps/files_sharing/l10n/hu.js4
-rw-r--r--apps/files_sharing/l10n/hu.json4
-rw-r--r--apps/files_sharing/l10n/is.js4
-rw-r--r--apps/files_sharing/l10n/is.json4
-rw-r--r--apps/files_sharing/l10n/it.js4
-rw-r--r--apps/files_sharing/l10n/it.json4
-rw-r--r--apps/files_sharing/l10n/ja.js4
-rw-r--r--apps/files_sharing/l10n/ja.json4
-rw-r--r--apps/files_sharing/l10n/ko.js4
-rw-r--r--apps/files_sharing/l10n/ko.json4
-rw-r--r--apps/files_sharing/l10n/lt_LT.js4
-rw-r--r--apps/files_sharing/l10n/lt_LT.json4
-rw-r--r--apps/files_sharing/l10n/nb.js4
-rw-r--r--apps/files_sharing/l10n/nb.json4
-rw-r--r--apps/files_sharing/l10n/nl.js4
-rw-r--r--apps/files_sharing/l10n/nl.json4
-rw-r--r--apps/files_sharing/l10n/pl.js4
-rw-r--r--apps/files_sharing/l10n/pl.json4
-rw-r--r--apps/files_sharing/l10n/pt_BR.js4
-rw-r--r--apps/files_sharing/l10n/pt_BR.json4
-rw-r--r--apps/files_sharing/l10n/ru.js4
-rw-r--r--apps/files_sharing/l10n/ru.json4
-rw-r--r--apps/files_sharing/l10n/sk.js4
-rw-r--r--apps/files_sharing/l10n/sk.json4
-rw-r--r--apps/files_sharing/l10n/sq.js4
-rw-r--r--apps/files_sharing/l10n/sq.json4
-rw-r--r--apps/files_sharing/l10n/sr.js4
-rw-r--r--apps/files_sharing/l10n/sr.json4
-rw-r--r--apps/files_sharing/l10n/sv.js4
-rw-r--r--apps/files_sharing/l10n/sv.json4
-rw-r--r--apps/files_sharing/l10n/tr.js4
-rw-r--r--apps/files_sharing/l10n/tr.json4
-rw-r--r--apps/files_sharing/l10n/zh_CN.js4
-rw-r--r--apps/files_sharing/l10n/zh_CN.json4
-rw-r--r--apps/files_sharing/l10n/zh_TW.js4
-rw-r--r--apps/files_sharing/l10n/zh_TW.json4
-rw-r--r--apps/files_sharing/lib/Collaboration/ShareRecipientSorter.php110
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php11
-rw-r--r--apps/files_sharing/templates/public.php55
-rw-r--r--apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php258
-rw-r--r--apps/files_sharing/tests/js/shareSpec.js12
-rw-r--r--apps/files_trashbin/composer/autoload.php7
-rw-r--r--apps/files_trashbin/composer/composer.json13
-rw-r--r--apps/files_trashbin/composer/composer/ClassLoader.php445
-rw-r--r--apps/files_trashbin/composer/composer/LICENSE21
-rw-r--r--apps/files_trashbin/composer/composer/autoload_classmap.php23
-rw-r--r--apps/files_trashbin/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files_trashbin/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files_trashbin/composer/composer/autoload_real.php52
-rw-r--r--apps/files_trashbin/composer/composer/autoload_static.php49
-rw-r--r--apps/files_trashbin/l10n/es_CR.js21
-rw-r--r--apps/files_trashbin/l10n/es_CR.json19
-rw-r--r--apps/files_trashbin/l10n/es_DO.js21
-rw-r--r--apps/files_trashbin/l10n/es_DO.json19
-rw-r--r--apps/files_versions/composer/autoload.php7
-rw-r--r--apps/files_versions/composer/composer.json13
-rw-r--r--apps/files_versions/composer/composer/ClassLoader.php445
-rw-r--r--apps/files_versions/composer/composer/LICENSE21
-rw-r--r--apps/files_versions/composer/composer/autoload_classmap.php20
-rw-r--r--apps/files_versions/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/files_versions/composer/composer/autoload_psr4.php10
-rw-r--r--apps/files_versions/composer/composer/autoload_real.php52
-rw-r--r--apps/files_versions/composer/composer/autoload_static.php46
-rw-r--r--apps/files_versions/l10n/es_CR.js14
-rw-r--r--apps/files_versions/l10n/es_CR.json12
-rw-r--r--apps/files_versions/l10n/es_DO.js14
-rw-r--r--apps/files_versions/l10n/es_DO.json12
-rw-r--r--apps/files_versions/l10n/eu.js6
-rw-r--r--apps/files_versions/l10n/eu.json6
-rw-r--r--apps/files_versions/l10n/sk.js2
-rw-r--r--apps/files_versions/l10n/sk.json2
-rw-r--r--apps/lookup_server_connector/composer/autoload.php7
-rw-r--r--apps/lookup_server_connector/composer/composer.json13
-rw-r--r--apps/lookup_server_connector/composer/composer/ClassLoader.php445
-rw-r--r--apps/lookup_server_connector/composer/composer/LICENSE21
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_classmap.php11
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_psr4.php10
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_real.php52
-rw-r--r--apps/lookup_server_connector/composer/composer/autoload_static.php37
-rw-r--r--apps/oauth2/composer/autoload.php7
-rw-r--r--apps/oauth2/composer/composer.json13
-rw-r--r--apps/oauth2/composer/composer/ClassLoader.php445
-rw-r--r--apps/oauth2/composer/composer/LICENSE21
-rw-r--r--apps/oauth2/composer/composer/autoload_classmap.php19
-rw-r--r--apps/oauth2/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/oauth2/composer/composer/autoload_psr4.php10
-rw-r--r--apps/oauth2/composer/composer/autoload_real.php52
-rw-r--r--apps/oauth2/composer/composer/autoload_static.php45
-rw-r--r--apps/oauth2/l10n/es_CR.js13
-rw-r--r--apps/oauth2/l10n/es_CR.json11
-rw-r--r--apps/oauth2/l10n/es_DO.js13
-rw-r--r--apps/oauth2/l10n/es_DO.json11
-rw-r--r--apps/provisioning_api/composer/autoload.php7
-rw-r--r--apps/provisioning_api/composer/composer.json13
-rw-r--r--apps/provisioning_api/composer/composer/ClassLoader.php445
-rw-r--r--apps/provisioning_api/composer/composer/LICENSE21
-rw-r--r--apps/provisioning_api/composer/composer/autoload_classmap.php16
-rw-r--r--apps/provisioning_api/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/provisioning_api/composer/composer/autoload_psr4.php10
-rw-r--r--apps/provisioning_api/composer/composer/autoload_real.php52
-rw-r--r--apps/provisioning_api/composer/composer/autoload_static.php42
-rw-r--r--apps/sharebymail/composer/autoload.php7
-rw-r--r--apps/sharebymail/composer/composer.json13
-rw-r--r--apps/sharebymail/composer/composer/ClassLoader.php445
-rw-r--r--apps/sharebymail/composer/composer/LICENSE21
-rw-r--r--apps/sharebymail/composer/composer/autoload_classmap.php16
-rw-r--r--apps/sharebymail/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/sharebymail/composer/composer/autoload_psr4.php10
-rw-r--r--apps/sharebymail/composer/composer/autoload_real.php52
-rw-r--r--apps/sharebymail/composer/composer/autoload_static.php42
-rw-r--r--apps/sharebymail/l10n/es_CR.js50
-rw-r--r--apps/sharebymail/l10n/es_CR.json48
-rw-r--r--apps/systemtags/composer/autoload.php7
-rw-r--r--apps/systemtags/composer/composer.json13
-rw-r--r--apps/systemtags/composer/composer/ClassLoader.php445
-rw-r--r--apps/systemtags/composer/composer/LICENSE21
-rw-r--r--apps/systemtags/composer/composer/autoload_classmap.php14
-rw-r--r--apps/systemtags/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/systemtags/composer/composer/autoload_psr4.php10
-rw-r--r--apps/systemtags/composer/composer/autoload_real.php52
-rw-r--r--apps/systemtags/composer/composer/autoload_static.php40
-rw-r--r--apps/systemtags/l10n/es_CR.js58
-rw-r--r--apps/systemtags/l10n/es_CR.json56
-rw-r--r--apps/testing/composer/autoload.php7
-rw-r--r--apps/testing/composer/composer.json13
-rw-r--r--apps/testing/composer/composer/ClassLoader.php445
-rw-r--r--apps/testing/composer/composer/LICENSE21
-rw-r--r--apps/testing/composer/composer/autoload_classmap.php15
-rw-r--r--apps/testing/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/testing/composer/composer/autoload_psr4.php10
-rw-r--r--apps/testing/composer/composer/autoload_real.php52
-rw-r--r--apps/testing/composer/composer/autoload_static.php41
-rw-r--r--apps/theming/l10n/en_GB.js8
-rw-r--r--apps/theming/l10n/en_GB.json8
-rw-r--r--apps/theming/l10n/es.js8
-rw-r--r--apps/theming/l10n/es.json8
-rw-r--r--apps/theming/l10n/es_CO.js1
-rw-r--r--apps/theming/l10n/es_CO.json1
-rw-r--r--apps/theming/l10n/es_CR.js39
-rw-r--r--apps/theming/l10n/es_CR.json37
-rw-r--r--apps/theming/l10n/es_MX.js1
-rw-r--r--apps/theming/l10n/es_MX.json1
-rw-r--r--apps/twofactor_backupcodes/composer/autoload.php7
-rw-r--r--apps/twofactor_backupcodes/composer/composer.json13
-rw-r--r--apps/twofactor_backupcodes/composer/composer/ClassLoader.php445
-rw-r--r--apps/twofactor_backupcodes/composer/composer/LICENSE21
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_classmap.php21
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_psr4.php10
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_real.php52
-rw-r--r--apps/twofactor_backupcodes/composer/composer/autoload_static.php47
-rw-r--r--apps/twofactor_backupcodes/l10n/es_CR.js18
-rw-r--r--apps/twofactor_backupcodes/l10n/es_CR.json16
-rw-r--r--apps/updatenotification/composer/autoload.php7
-rw-r--r--apps/updatenotification/composer/composer.json13
-rw-r--r--apps/updatenotification/composer/composer/ClassLoader.php445
-rw-r--r--apps/updatenotification/composer/composer/LICENSE21
-rw-r--r--apps/updatenotification/composer/composer/autoload_classmap.php15
-rw-r--r--apps/updatenotification/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/updatenotification/composer/composer/autoload_psr4.php10
-rw-r--r--apps/updatenotification/composer/composer/autoload_real.php52
-rw-r--r--apps/updatenotification/composer/composer/autoload_static.php41
-rw-r--r--apps/updatenotification/l10n/es_CR.js28
-rw-r--r--apps/updatenotification/l10n/es_CR.json26
-rw-r--r--apps/user_ldap/composer/autoload.php7
-rw-r--r--apps/user_ldap/composer/composer.json13
-rw-r--r--apps/user_ldap/composer/composer/ClassLoader.php445
-rw-r--r--apps/user_ldap/composer/composer/LICENSE21
-rw-r--r--apps/user_ldap/composer/composer/autoload_classmap.php59
-rw-r--r--apps/user_ldap/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/user_ldap/composer/composer/autoload_psr4.php10
-rw-r--r--apps/user_ldap/composer/composer/autoload_real.php52
-rw-r--r--apps/user_ldap/composer/composer/autoload_static.php85
-rw-r--r--apps/user_ldap/l10n/es_CR.js197
-rw-r--r--apps/user_ldap/l10n/es_CR.json195
-rw-r--r--apps/user_ldap/lib/Access.php19
-rw-r--r--apps/user_ldap/lib/Connection.php2
-rw-r--r--apps/workflowengine/l10n/es_CR.js73
-rw-r--r--apps/workflowengine/l10n/es_CR.json71
-rw-r--r--apps/workflowengine/l10n/id.js24
-rw-r--r--apps/workflowengine/l10n/id.json24
-rw-r--r--build/.phan/config.php21
-rw-r--r--config/config.sample.php1
-rw-r--r--core/Controller/AutoCompleteController.php102
-rw-r--r--core/Controller/WalledGardenController.php42
-rw-r--r--core/css/guest.css12
-rw-r--r--core/css/header.scss2
-rw-r--r--core/css/icons.scss10
-rw-r--r--core/css/inputs.scss8
-rw-r--r--core/css/mobile.scss5
-rw-r--r--core/img/actions/address.svg1
-rw-r--r--core/js/share.js39
-rw-r--r--core/js/tests/specs/shareSpec.js63
-rw-r--r--core/l10n/ast.js2
-rw-r--r--core/l10n/ast.json2
-rw-r--r--core/l10n/bg.js2
-rw-r--r--core/l10n/bg.json2
-rw-r--r--core/l10n/ca.js2
-rw-r--r--core/l10n/ca.json2
-rw-r--r--core/l10n/cs.js2
-rw-r--r--core/l10n/cs.json2
-rw-r--r--core/l10n/da.js2
-rw-r--r--core/l10n/da.json2
-rw-r--r--core/l10n/de.js3
-rw-r--r--core/l10n/de.json3
-rw-r--r--core/l10n/de_DE.js3
-rw-r--r--core/l10n/de_DE.json3
-rw-r--r--core/l10n/el.js2
-rw-r--r--core/l10n/el.json2
-rw-r--r--core/l10n/en_GB.js2
-rw-r--r--core/l10n/en_GB.json2
-rw-r--r--core/l10n/es.js2
-rw-r--r--core/l10n/es.json2
-rw-r--r--core/l10n/es_AR.js2
-rw-r--r--core/l10n/es_AR.json2
-rw-r--r--core/l10n/es_CO.js3
-rw-r--r--core/l10n/es_CO.json3
-rw-r--r--core/l10n/es_CR.js357
-rw-r--r--core/l10n/es_CR.json355
-rw-r--r--core/l10n/es_DO.js357
-rw-r--r--core/l10n/es_DO.json355
-rw-r--r--core/l10n/es_MX.js3
-rw-r--r--core/l10n/es_MX.json3
-rw-r--r--core/l10n/et_EE.js2
-rw-r--r--core/l10n/et_EE.json2
-rw-r--r--core/l10n/eu.js59
-rw-r--r--core/l10n/eu.json59
-rw-r--r--core/l10n/fa.js2
-rw-r--r--core/l10n/fa.json2
-rw-r--r--core/l10n/fi.js2
-rw-r--r--core/l10n/fi.json2
-rw-r--r--core/l10n/fr.js3
-rw-r--r--core/l10n/fr.json3
-rw-r--r--core/l10n/hu.js2
-rw-r--r--core/l10n/hu.json2
-rw-r--r--core/l10n/id.js2
-rw-r--r--core/l10n/id.json2
-rw-r--r--core/l10n/is.js2
-rw-r--r--core/l10n/is.json2
-rw-r--r--core/l10n/it.js3
-rw-r--r--core/l10n/it.json3
-rw-r--r--core/l10n/ja.js2
-rw-r--r--core/l10n/ja.json2
-rw-r--r--core/l10n/ko.js2
-rw-r--r--core/l10n/ko.json2
-rw-r--r--core/l10n/lt_LT.js2
-rw-r--r--core/l10n/lt_LT.json2
-rw-r--r--core/l10n/lv.js2
-rw-r--r--core/l10n/lv.json2
-rw-r--r--core/l10n/nb.js2
-rw-r--r--core/l10n/nb.json2
-rw-r--r--core/l10n/nl.js3
-rw-r--r--core/l10n/nl.json3
-rw-r--r--core/l10n/pl.js2
-rw-r--r--core/l10n/pl.json2
-rw-r--r--core/l10n/pt_BR.js3
-rw-r--r--core/l10n/pt_BR.json3
-rw-r--r--core/l10n/pt_PT.js2
-rw-r--r--core/l10n/pt_PT.json2
-rw-r--r--core/l10n/ro.js2
-rw-r--r--core/l10n/ro.json2
-rw-r--r--core/l10n/ru.js2
-rw-r--r--core/l10n/ru.json2
-rw-r--r--core/l10n/sk.js2
-rw-r--r--core/l10n/sk.json2
-rw-r--r--core/l10n/sl.js2
-rw-r--r--core/l10n/sl.json2
-rw-r--r--core/l10n/sq.js2
-rw-r--r--core/l10n/sq.json2
-rw-r--r--core/l10n/sr.js2
-rw-r--r--core/l10n/sr.json2
-rw-r--r--core/l10n/sv.js2
-rw-r--r--core/l10n/sv.json2
-rw-r--r--core/l10n/tr.js3
-rw-r--r--core/l10n/tr.json3
-rw-r--r--core/l10n/uk.js2
-rw-r--r--core/l10n/uk.json2
-rw-r--r--core/l10n/vi.js2
-rw-r--r--core/l10n/vi.json2
-rw-r--r--core/l10n/zh_CN.js2
-rw-r--r--core/l10n/zh_CN.json2
-rw-r--r--core/l10n/zh_TW.js2
-rw-r--r--core/l10n/zh_TW.json2
-rw-r--r--core/routes.php2
-rw-r--r--core/templates/loginflow/authpicker.php4
-rw-r--r--lib/composer/composer/autoload_classmap.php8
-rw-r--r--lib/composer/composer/autoload_static.php8
-rw-r--r--lib/l10n/en_GB.js9
-rw-r--r--lib/l10n/en_GB.json9
-rw-r--r--lib/l10n/es.js9
-rw-r--r--lib/l10n/es.json9
-rw-r--r--lib/l10n/es_CR.js259
-rw-r--r--lib/l10n/es_CR.json257
-rw-r--r--lib/l10n/es_DO.js259
-rw-r--r--lib/l10n/es_DO.json257
-rw-r--r--lib/private/Collaboration/AutoComplete/Manager.php81
-rw-r--r--lib/private/Collaboration/Collaborators/SearchResult.php8
-rw-r--r--lib/private/DB/MDB2SchemaManager.php2
-rw-r--r--lib/private/DB/NoCheckMigrator.php39
-rw-r--r--lib/private/DB/OracleMigrator.php148
-rw-r--r--lib/private/Files/ObjectStore/ObjectStoreStorage.php10
-rw-r--r--lib/private/Files/ObjectStore/S3ObjectTrait.php13
-rw-r--r--lib/private/Files/Type/Detection.php4
-rw-r--r--lib/private/Files/View.php24
-rw-r--r--lib/private/Mail/Attachment.php78
-rw-r--r--lib/private/Mail/Mailer.php22
-rw-r--r--lib/private/Mail/Message.php12
-rw-r--r--lib/private/Server.php10
-rw-r--r--lib/private/Share20/Manager.php2
-rw-r--r--lib/private/SystemConfig.php8
-rw-r--r--lib/private/legacy/app.php2
-rw-r--r--lib/public/Collaboration/AutoComplete/IManager.php46
-rw-r--r--lib/public/Collaboration/AutoComplete/ISorter.php50
-rw-r--r--lib/public/IRequest.php10
-rw-r--r--lib/public/Mail/IAttachment.php53
-rw-r--r--lib/public/Mail/IMailer.php17
-rw-r--r--lib/public/Mail/IMessage.php10
-rw-r--r--settings/css/settings.scss14
-rw-r--r--settings/l10n/es.js2
-rw-r--r--settings/l10n/es.json2
-rw-r--r--settings/l10n/es_CR.js457
-rw-r--r--settings/l10n/es_CR.json455
-rw-r--r--settings/l10n/eu.js60
-rw-r--r--settings/l10n/eu.json60
-rw-r--r--settings/l10n/nl.js2
-rw-r--r--settings/l10n/nl.json2
-rw-r--r--tests/Core/Controller/AutoCompleteControllerTest.php118
-rw-r--r--tests/acceptance/config/behat.yml1
-rw-r--r--tests/acceptance/features/app-comments.feature8
-rw-r--r--tests/acceptance/features/bootstrap/CommentsAppContext.php82
-rwxr-xr-xtests/acceptance/run.sh2
-rw-r--r--tests/karma.config.js2
-rw-r--r--tests/lib/Collaboration/Collaborators/SearchResultTest.php105
-rw-r--r--tests/lib/Comments/FakeManager.php14
-rw-r--r--tests/lib/Comments/ManagerTest.php50
-rw-r--r--tests/lib/DB/MigratorTest.php39
-rw-r--r--tests/lib/Files/Type/DetectionTest.php2
-rw-r--r--tests/lib/LoggerTest.php26
583 files changed, 22575 insertions, 733 deletions
diff --git a/.gitignore b/.gitignore
index 07e4c1c74b3..8e0794a7999 100644
--- a/.gitignore
+++ b/.gitignore
@@ -136,3 +136,7 @@ Vagrantfile
/config/config-autotest-backup.php
/config/autoconfig.php
clover.xml
+
+# Tests - dependencies
+tests/acceptance/composer.lock
+tests/acceptance/vendor/
diff --git a/apps/admin_audit/composer/autoload.php b/apps/admin_audit/composer/autoload.php
new file mode 100644
index 00000000000..7970e9ebe12
--- /dev/null
+++ b/apps/admin_audit/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitAdminAudit::getLoader();
diff --git a/apps/admin_audit/composer/composer.json b/apps/admin_audit/composer/composer.json
new file mode 100644
index 00000000000..ae9b104b697
--- /dev/null
+++ b/apps/admin_audit/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "AdminAudit"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\AdminAudit\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/admin_audit/composer/composer/ClassLoader.php b/apps/admin_audit/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/admin_audit/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/admin_audit/composer/composer/LICENSE b/apps/admin_audit/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/admin_audit/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/admin_audit/composer/composer/autoload_classmap.php b/apps/admin_audit/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..487e05172de
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_classmap.php
@@ -0,0 +1,20 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\AdminAudit\\Actions\\Action' => $baseDir . '/../lib/Actions/Action.php',
+ 'OCA\\AdminAudit\\Actions\\AppManagement' => $baseDir . '/../lib/Actions/AppManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Auth' => $baseDir . '/../lib/Actions/Auth.php',
+ 'OCA\\AdminAudit\\Actions\\Console' => $baseDir . '/../lib/Actions/Console.php',
+ 'OCA\\AdminAudit\\Actions\\Files' => $baseDir . '/../lib/Actions/Files.php',
+ 'OCA\\AdminAudit\\Actions\\GroupManagement' => $baseDir . '/../lib/Actions/GroupManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Sharing' => $baseDir . '/../lib/Actions/Sharing.php',
+ 'OCA\\AdminAudit\\Actions\\Trashbin' => $baseDir . '/../lib/Actions/Trashbin.php',
+ 'OCA\\AdminAudit\\Actions\\UserManagement' => $baseDir . '/../lib/Actions/UserManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Versions' => $baseDir . '/../lib/Actions/Versions.php',
+ 'OCA\\AdminAudit\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+);
diff --git a/apps/admin_audit/composer/composer/autoload_namespaces.php b/apps/admin_audit/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/admin_audit/composer/composer/autoload_psr4.php b/apps/admin_audit/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..63a4845c93d
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\AdminAudit\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/admin_audit/composer/composer/autoload_real.php b/apps/admin_audit/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..1cbbc489538
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitAdminAudit
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitAdminAudit', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitAdminAudit', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitAdminAudit::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/admin_audit/composer/composer/autoload_static.php b/apps/admin_audit/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..b5f055de44e
--- /dev/null
+++ b/apps/admin_audit/composer/composer/autoload_static.php
@@ -0,0 +1,46 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitAdminAudit
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\AdminAudit\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\AdminAudit\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\AdminAudit\\Actions\\Action' => __DIR__ . '/..' . '/../lib/Actions/Action.php',
+ 'OCA\\AdminAudit\\Actions\\AppManagement' => __DIR__ . '/..' . '/../lib/Actions/AppManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Auth' => __DIR__ . '/..' . '/../lib/Actions/Auth.php',
+ 'OCA\\AdminAudit\\Actions\\Console' => __DIR__ . '/..' . '/../lib/Actions/Console.php',
+ 'OCA\\AdminAudit\\Actions\\Files' => __DIR__ . '/..' . '/../lib/Actions/Files.php',
+ 'OCA\\AdminAudit\\Actions\\GroupManagement' => __DIR__ . '/..' . '/../lib/Actions/GroupManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Sharing' => __DIR__ . '/..' . '/../lib/Actions/Sharing.php',
+ 'OCA\\AdminAudit\\Actions\\Trashbin' => __DIR__ . '/..' . '/../lib/Actions/Trashbin.php',
+ 'OCA\\AdminAudit\\Actions\\UserManagement' => __DIR__ . '/..' . '/../lib/Actions/UserManagement.php',
+ 'OCA\\AdminAudit\\Actions\\Versions' => __DIR__ . '/..' . '/../lib/Actions/Versions.php',
+ 'OCA\\AdminAudit\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitAdminAudit::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitAdminAudit::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitAdminAudit::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/comments/.bowerrc b/apps/comments/.bowerrc
new file mode 100644
index 00000000000..faee1372545
--- /dev/null
+++ b/apps/comments/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "js/vendor"
+} \ No newline at end of file
diff --git a/apps/comments/appinfo/app.php b/apps/comments/appinfo/app.php
index 067e01e47ef..f6e022e8179 100644
--- a/apps/comments/appinfo/app.php
+++ b/apps/comments/appinfo/app.php
@@ -27,6 +27,7 @@ $eventDispatcher->addListener(
function() {
\OCP\Util::addScript('oc-backbone-webdav');
\OCP\Util::addScript('comments', 'merged');
+ \OCP\Util::addStyle('comments', 'autocomplete');
\OCP\Util::addStyle('comments', 'comments');
}
);
diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml
index b67def1fb9d..6fcfa4bd399 100644
--- a/apps/comments/appinfo/info.xml
+++ b/apps/comments/appinfo/info.xml
@@ -28,4 +28,10 @@
<provider>OCA\Comments\Activity\Provider</provider>
</providers>
</activity>
+
+ <collaboration>
+ <plugins>
+ <plugin type="autocomplete-sort">OCA\Comments\Collaboration\CommentersSorter</plugin>
+ </plugins>
+ </collaboration>
</info>
diff --git a/apps/comments/composer/autoload.php b/apps/comments/composer/autoload.php
new file mode 100644
index 00000000000..c974072d6b7
--- /dev/null
+++ b/apps/comments/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitComments::getLoader();
diff --git a/apps/comments/composer/composer.json b/apps/comments/composer/composer.json
new file mode 100644
index 00000000000..523394b5d8e
--- /dev/null
+++ b/apps/comments/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Comments"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Comments\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/comments/composer/composer/ClassLoader.php b/apps/comments/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/comments/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/comments/composer/composer/LICENSE b/apps/comments/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/comments/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/comments/composer/composer/autoload_classmap.php b/apps/comments/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..0000ab9081a
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_classmap.php
@@ -0,0 +1,20 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Comments\\Activity\\Filter' => $baseDir . '/../lib/Activity/Filter.php',
+ 'OCA\\Comments\\Activity\\Listener' => $baseDir . '/../lib/Activity/Listener.php',
+ 'OCA\\Comments\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\Comments\\Activity\\Setting' => $baseDir . '/../lib/Activity/Setting.php',
+ 'OCA\\Comments\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Comments\\Collaboration\\CommentersSorter' => $baseDir . '/../lib/Collaboration/CommentersSorter.php',
+ 'OCA\\Comments\\Controller\\Notifications' => $baseDir . '/../lib/Controller/Notifications.php',
+ 'OCA\\Comments\\EventHandler' => $baseDir . '/../lib/EventHandler.php',
+ 'OCA\\Comments\\JSSettingsHelper' => $baseDir . '/../lib/JSSettingsHelper.php',
+ 'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
+ 'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+);
diff --git a/apps/comments/composer/composer/autoload_namespaces.php b/apps/comments/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/comments/composer/composer/autoload_psr4.php b/apps/comments/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..f30d722bf9e
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Comments\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/comments/composer/composer/autoload_real.php b/apps/comments/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..1ce284f24f4
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitComments
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitComments', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitComments', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitComments::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/comments/composer/composer/autoload_static.php b/apps/comments/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..662f77f89dc
--- /dev/null
+++ b/apps/comments/composer/composer/autoload_static.php
@@ -0,0 +1,46 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitComments
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Comments\\' => 13,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Comments\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Comments\\Activity\\Filter' => __DIR__ . '/..' . '/../lib/Activity/Filter.php',
+ 'OCA\\Comments\\Activity\\Listener' => __DIR__ . '/..' . '/../lib/Activity/Listener.php',
+ 'OCA\\Comments\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\Comments\\Activity\\Setting' => __DIR__ . '/..' . '/../lib/Activity/Setting.php',
+ 'OCA\\Comments\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Comments\\Collaboration\\CommentersSorter' => __DIR__ . '/..' . '/../lib/Collaboration/CommentersSorter.php',
+ 'OCA\\Comments\\Controller\\Notifications' => __DIR__ . '/..' . '/../lib/Controller/Notifications.php',
+ 'OCA\\Comments\\EventHandler' => __DIR__ . '/..' . '/../lib/EventHandler.php',
+ 'OCA\\Comments\\JSSettingsHelper' => __DIR__ . '/..' . '/../lib/JSSettingsHelper.php',
+ 'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
+ 'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitComments::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitComments::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitComments::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/comments/css/autocomplete.scss b/apps/comments/css/autocomplete.scss
new file mode 100644
index 00000000000..10e56f15420
--- /dev/null
+++ b/apps/comments/css/autocomplete.scss
@@ -0,0 +1,77 @@
+/**
+ * based upon apps/comments/js/vendor/At.js/dist/css/jquery.atwho.css,
+ * only changed colors and font-weight
+ */
+
+.atwho-view {
+ position:absolute;
+ top: 0;
+ left: 0;
+ display: none;
+ margin-top: 18px;
+ background: $color-main-background;
+ color: $color-main-text;
+ border: 1px solid $color-border;
+ border-radius: 3px;
+ box-shadow: 0 0 5px $color-box-shadow;
+ min-width: 120px;
+ z-index: 11110 !important;
+}
+
+.atwho-view .atwho-header {
+ padding: 5px;
+ margin: 5px;
+ cursor: pointer;
+ border-bottom: solid 1px $color-border;
+ color: $color-main-text;
+ font-size: 11px;
+ font-weight: bold;
+}
+
+.atwho-view .atwho-header .small {
+ color: $color-main-text;
+ float: right;
+ padding-top: 2px;
+ margin-right: -5px;
+ font-size: 12px;
+ font-weight: normal;
+}
+
+.atwho-view .atwho-header:hover {
+ cursor: default;
+}
+
+.atwho-view .cur {
+ background: $color-primary;
+ color: $color-primary-text;
+}
+.atwho-view .cur small {
+ color: $color-primary-text;
+}
+.atwho-view strong {
+ color: $color-main-text;
+ font-weight: normal;
+}
+.atwho-view .cur strong {
+ color: $color-primary-text;
+ font-weight: normal;
+}
+.atwho-view ul {
+ /* width: 100px; */
+ list-style:none;
+ padding:0;
+ margin:auto;
+ max-height: 200px;
+ overflow-y: auto;
+}
+.atwho-view ul li {
+ display: block;
+ padding: 5px 10px;
+ border-bottom: 1px solid $color-border;
+ cursor: pointer;
+}
+.atwho-view small {
+ font-size: smaller;
+ color: $color-main-text;
+ font-weight: normal;
+}
diff --git a/apps/comments/css/comments.css b/apps/comments/css/comments.css
index d63211391f6..09771b4e954 100644
--- a/apps/comments/css/comments.css
+++ b/apps/comments/css/comments.css
@@ -48,22 +48,30 @@
margin-right: 6px;
}
-#commentsTabView .newCommentForm textarea {
+#commentsTabView .newCommentForm div.message {
resize: none;
}
+#commentsTabView .newCommentForm div.message:empty:before {
+ content: attr(data-placeholder);
+ color: grey;
+}
+
#commentsTabView .comment {
position: relative;
margin-bottom: 30px;
}
-#commentsTabView .comment .avatar {
+#commentsTabView .comment .avatar,
+.atwho-view-ul * .avatar{
width: 32px;
height: 32px;
line-height: 32px;
}
-#commentsTabView .comment .message .avatar {
+#commentsTabView .comment .message .avatar,
+.atwho-view-ul * .avatar
+{
display: inline-block;
}
@@ -112,11 +120,16 @@
}
#commentsTabView .comments li .message .avatar-name-wrapper,
+.atwho-view-ul * .avatar-name-wrapper,
#commentsTabView .comment .authorRow {
position: relative;
cursor: pointer;
}
+.atwho-view-ul * .avatar-name-wrapper {
+ white-space: nowrap;
+}
+
#commentsTabView .comment .author,
#commentsTabView .comment .date {
opacity: .5;
diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js
index 3a20604326b..7398a709421 100644
--- a/apps/comments/js/commentstabview.js
+++ b/apps/comments/js/commentstabview.js
@@ -30,7 +30,7 @@
'{{/if}}' +
' </div>' +
' <form class="newCommentForm">' +
- ' <textarea rows="1" class="message" placeholder="{{newMessagePlaceholder}}">{{message}}</textarea>' +
+ ' <div contentEditable="true" class="message" data-placeholder="{{newMessagePlaceholder}}">{{message}}</div>' +
' <input class="submit icon-confirm" type="submit" value="" />' +
'{{#if isEditMode}}' +
' <input class="cancel pull-right" type="button" value="{{cancelText}}" />' +
@@ -62,6 +62,7 @@
/** @lends OCA.Comments.CommentsTabView.prototype */ {
id: 'commentsTabView',
className: 'tab commentsTabView',
+ _autoCompleteData: undefined,
events: {
'submit .newCommentForm': '_onSubmitComment',
@@ -69,7 +70,11 @@
'click .action.edit': '_onClickEditComment',
'click .action.delete': '_onClickDeleteComment',
'click .cancel': '_onClickCloseComment',
- 'click .comment': '_onClickComment'
+ 'click .comment': '_onClickComment',
+ 'keyup div.message': '_onTextChange',
+ 'change div.message': '_onTextChange',
+ 'input div.message': '_onTextChange',
+ 'paste div.message': '_onPaste'
},
_commentMaxLength: 1000,
@@ -80,11 +85,12 @@
this.collection.on('request', this._onRequest, this);
this.collection.on('sync', this._onEndRequest, this);
this.collection.on('add', this._onAddModel, this);
+ this.collection.on('change:message', this._onChangeModel, this);
this._commentMaxThreshold = this._commentMaxLength * 0.9;
// TODO: error handling
- _.bindAll(this, '_onTypeComment');
+ _.bindAll(this, '_onTypeComment', '_initAutoComplete', '_onAutoComplete');
},
template: function(params) {
@@ -140,8 +146,10 @@
setFileInfo: function(fileInfo) {
if (fileInfo) {
this.model = fileInfo;
+
this.render();
- this.collection.setObjectId(fileInfo.id);
+ this._initAutoComplete($('#commentsTabView').find('.newCommentForm .message'));
+ this.collection.setObjectId(this.model.id);
// reset to first page
this.collection.reset([], {silent: true});
this.nextPage();
@@ -164,7 +172,85 @@
this.delegateEvents();
this.$el.find('.message').on('keydown input change', this._onTypeComment);
- autosize(this.$el.find('.newCommentRow textarea'))
+ autosize(this.$el.find('.newCommentRow .message'))
+ },
+
+ _initAutoComplete: function($target) {
+ var s = this;
+ var limit = 10;
+ if(!_.isUndefined(OC.appConfig.comments)) {
+ limit = OC.appConfig.comments.maxAutoCompleteResults;
+ }
+ $target.atwho({
+ at: '@',
+ limit: limit,
+ callbacks: {
+ remoteFilter: s._onAutoComplete,
+ highlighter: function (li) {
+ // misuse the highlighter callback to instead of
+ // highlighting loads the avatars.
+ var $li = $(li);
+ $li.find('.avatar').avatar(undefined, 32);
+ return $li;
+ },
+ sorter: function (q, items) { return items; }
+ },
+ displayTpl: '<li>'
+ + '<span class="avatar-name-wrapper">'
+ + '<div class="avatar" '
+ + 'data-username="${id}"' // for avatars
+ + ' data-user="${id}"' // for contactsmenu
+ + ' data-user-display-name="${label}"></div>'
+ + ' <strong>${label}</strong>'
+ + '</span></li>',
+ insertTpl: ''
+ + '<span class="avatar-name-wrapper">'
+ + '<div class="avatar" '
+ + 'data-username="${id}"' // for avatars
+ + ' data-user="${id}"' // for contactsmenu
+ + ' data-user-display-name="${label}"></div>'
+ + ' <strong>${label}</strong>'
+ + '</span>',
+ searchKey: "label"
+ });
+ $target.on('inserted.atwho', function (je, $el) {
+ s._postRenderItem(
+ // we need to pass the parent of the inserted element
+ // passing the whole comments form would re-apply and request
+ // avatars from the server
+ $(je.target).find(
+ 'div[data-username="' + $el.find('[data-username]').data('username') + '"]'
+ ).parent()
+ );
+ });
+ },
+
+ _onAutoComplete: function(query, callback) {
+ if(_.isEmpty(query)) {
+ return;
+ }
+ var s = this;
+ if(!_.isUndefined(this._autoCompleteRequestTimer)) {
+ clearTimeout(this._autoCompleteRequestTimer);
+ }
+ this._autoCompleteRequestTimer = _.delay(function() {
+ if(!_.isUndefined(this._autoCompleteRequestCall)) {
+ this._autoCompleteRequestCall.abort();
+ }
+ this._autoCompleteRequestCall = $.get(
+ OC.generateUrl('/autocomplete/get'),
+ {
+ search: query,
+ itemType: 'files',
+ itemId: s.model.get('id'),
+ sorter: 'commenters|share-recipients',
+ limit: OC.appConfig.comments.maxAutoCompleteResults
+ },
+ function (data) {
+ callback(data);
+ }
+ );
+ }, 400);
},
_formatItem: function(commentModel) {
@@ -215,15 +301,80 @@
}
},
+ /**
+ * takes care of post-rendering after a new comment was added to the
+ * collection
+ *
+ * @param model
+ * @param collection
+ * @param options
+ * @private
+ */
_onAddModel: function(model, collection, options) {
- var $el = $(this.commentTemplate(this._formatItem(model)));
+ // we need to render it immediately, to ensure that the right
+ // order of comments is kept on opening comments tab
+ var $comment = $(this.commentTemplate(this._formatItem(model)));
if (!_.isUndefined(options.at) && collection.length > 1) {
- this.$container.find('li').eq(options.at).before($el);
+ this.$container.find('li').eq(options.at).before($comment);
} else {
- this.$container.append($el);
+ this.$container.append($comment);
}
+ this._postRenderItem($comment);
+ $('#commentsTabView').find('.newCommentForm div.message').text('').prop('disabled', false);
+
+ // we need to update the model, because it consists of client data
+ // only, but the server might add meta data, e.g. about mentions
+ var oldMentions = model.get('mentions');
+ var self = this;
+ model.fetch({
+ success: function (model) {
+ if(_.isEqual(oldMentions, model.get('mentions'))) {
+ // don't attempt to render if unnecessary, avoids flickering
+ return;
+ }
+ var $updated = $(self.commentTemplate(self._formatItem(model)));
+ $comment.html($updated.html());
+ self._postRenderItem($comment);
+ }
+ })
- this._postRenderItem($el);
+ },
+
+ /**
+ * takes care of post-rendering after a new comment was edited
+ *
+ * @param model
+ * @private
+ */
+ _onChangeModel: function (model) {
+ if(model.get('message').trim() === model.previous('message').trim()) {
+ return;
+ }
+
+ var $form = this.$container.find('.comment[data-id="' + model.id + '"] form');
+ var $row = $form.closest('.comment');
+ var $target = $row.data('commentEl');
+ if(_.isUndefined($target)) {
+ // ignore noise – this is only set after editing a comment and hitting post
+ return;
+ }
+ var self = this;
+
+ // we need to update the model, because it consists of client data
+ // only, but the server might add meta data, e.g. about mentions
+ model.fetch({
+ success: function (model) {
+ $target.removeClass('hidden');
+ $row.remove();
+
+ var $message = $target.find('.message');
+ $message
+ .html(self._formatMessage(model.get('message'), model.get('mentions')))
+ .find('.avatar')
+ .each(function () { $(this).avatar(); });
+ self._postRenderItem($message);
+ }
+ });
},
_postRenderItem: function($el) {
@@ -240,6 +391,10 @@
}
var $message = $el.find('.message');
+ if($message.length === 0) {
+ // it is the case when writing a comment and mentioning a person
+ $message = $el;
+ }
this._postRenderMessage($message);
},
@@ -261,19 +416,15 @@
message = escapeHTML(message).replace(/\n/g, '<br/>');
for(var i in mentions) {
+ if(!mentions.hasOwnProperty(i)) {
+ return;
+ }
var mention = '@' + mentions[i].mentionId;
- var avatar = '<div class="avatar" '
- + 'data-user="' + _.escape(mentions[i].mentionId) + '"'
- +' data-user-display-name="'
- + _.escape(mentions[i].mentionDisplayName) + '"></div>';
-
// escape possible regex characters in the name
mention = mention.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- var displayName = ''
- + '<span class="avatar-name-wrapper">'
- + avatar + ' <strong>'+ _.escape(mentions[i].mentionDisplayName)+'</strong>'
- + '</span>';
+
+ var displayName = this._composeHTMLMention(mentions[i].mentionId, mentions[i].mentionDisplayName);
// replace every mention either at the start of the input or after a whitespace
// followed by a non-word character.
@@ -284,10 +435,24 @@
}
);
}
-
return message;
},
+ _composeHTMLMention: function(uid, displayName) {
+ var avatar = '<div class="avatar" '
+ + 'data-username="' + _.escape(uid) + '"'
+ + ' data-user="' + _.escape(uid) + '"'
+ + ' data-user-display-name="'
+ + _.escape(displayName) + '"></div>';
+
+ return ''
+ + '<span class="atwho-inserted" contenteditable="false">'
+ + '<span class="avatar-name-wrapper">'
+ + avatar + ' <strong>'+ _.escape(displayName)+'</strong>'
+ + '</span>'
+ + '</span>';
+ },
+
nextPage: function() {
if (this._loading || !this.collection.hasMoreResults()) {
return;
@@ -310,14 +475,24 @@
// spawn form
$comment.after($formRow);
$formRow.data('commentEl', $comment);
- $formRow.find('textarea').on('keydown input change', this._onTypeComment);
+ $formRow.find('.message').on('keydown input change', this._onTypeComment);
// copy avatar element from original to avoid flickering
$formRow.find('.avatar:first').replaceWith($comment.find('.avatar:first').clone());
$formRow.find('.has-tooltip').tooltip();
+ var $message = $formRow.find('.message');
+ $message
+ .html(this._formatMessage(commentToEdit.get('message'), commentToEdit.get('mentions')))
+ .find('.avatar')
+ .each(function () { $(this).avatar(); });
+ this._postRenderItem($message);
+
// Enable autosize
- autosize($formRow.find('textarea'));
+ autosize($formRow.find('.message'));
+
+ // enable autocomplete
+ this._initAutoComplete($formRow.find('.message'));
return false;
},
@@ -393,48 +568,41 @@
},
/**
- * takes care of updating comment elements after submit (either new
+ * takes care of updating comment element states after submit (either new
* comment or edit).
*
* @param {OC.Backbone.Model} model
* @param {jQuery} $form
- * @param {string|undefined} commentId
* @private
*/
- _onSubmitSuccess: function(model, $form, commentId) {
- var self = this;
+ _onSubmitSuccess: function(model, $form) {
var $submit = $form.find('.submit');
var $loading = $form.find('.submitLoading');
- var $textArea = $form.find('.message');
- model.fetch({
- success: function(model) {
- $submit.removeClass('hidden');
- $loading.addClass('hidden');
- var $target;
-
- if(!_.isUndefined(commentId)) {
- var $row = $form.closest('.comment');
- $target = $row.data('commentEl');
- $target.removeClass('hidden');
- $row.remove();
- } else {
- $target = $('.commentsTabView .comments').find('li:first');
- $textArea.val('').prop('disabled', false);
- }
+ $submit.removeClass('hidden');
+ $loading.addClass('hidden');
+ },
- var $message = $target.find('.message');
- $message
- .html(self._formatMessage(model.get('message'), model.get('mentions')))
- .find('.avatar')
- .each(function () { $(this).avatar(); });
+ _commentBodyHTML2Plain: function($el) {
+ var $comment = $el.clone();
- self._postRenderMessage($message);
- },
- error: function () {
- self._onSubmitError($form, commentId);
- }
+ $comment.find('.avatar-name-wrapper').each(function () {
+ var $this = $(this);
+ var $inserted = $this.parent();
+ $inserted.html('@' + $this.find('.avatar').data('username'));
});
+
+ var oldHtml;
+ var html = $comment.html();
+ do {
+ // replace works one by one
+ oldHtml = html;
+ html = oldHtml.replace("<br>", "\n"); // preserve line breaks
+ console.warn(html)
+ } while(oldHtml !== html);
+ $comment.html(html);
+
+ return $comment.text();
},
_onSubmitComment: function(e) {
@@ -444,26 +612,27 @@
var currentUser = OC.getCurrentUser();
var $submit = $form.find('.submit');
var $loading = $form.find('.submitLoading');
- var $textArea = $form.find('.message');
- var message = $textArea.val().trim();
+ var $commentField = $form.find('.message');
+ var message = $commentField.text().trim();
e.preventDefault();
if (!message.length || message.length > this._commentMaxLength) {
return;
}
- $textArea.prop('disabled', true);
+ $commentField.prop('disabled', true);
$submit.addClass('hidden');
$loading.removeClass('hidden');
+ message = this._commentBodyHTML2Plain($commentField);
if (commentId) {
// edit mode
var comment = this.collection.get(commentId);
comment.save({
- message: $textArea.val()
+ message: message
}, {
success: function(model) {
- self._onSubmitSuccess(model, $form, commentId);
+ self._onSubmitSuccess(model, $form);
},
error: function() {
self._onSubmitError($form, commentId);
@@ -475,7 +644,7 @@
actorDisplayName: currentUser.displayName,
actorType: 'users',
verb: 'comment',
- message: $textArea.val(),
+ message: message,
creationDateTime: (new Date()).toUTCString()
}, {
at: 0,
@@ -485,7 +654,7 @@
self._onSubmitSuccess(model, $form);
},
error: function() {
- self._onSubmitError($form);
+ self._onSubmitError($form, undefined);
}
});
}
@@ -514,6 +683,31 @@
},
/**
+ * ensures the contenteditable div is really empty, when user removed
+ * all input, so that the placeholder will be shown again
+ *
+ * @private
+ */
+ _onTextChange: function() {
+ var $message = $('#commentsTabView').find('.newCommentForm div.message');
+ if(!$message.text().trim().length) {
+ $message.empty();
+ }
+ },
+
+ /**
+ * Limit pasting to plain text
+ *
+ * @param e
+ * @private
+ */
+ _onPaste: function (e) {
+ e.preventDefault();
+ var text = e.originalEvent.clipboardData.getData("text/plain");
+ document.execCommand('insertText', false, text);
+ },
+
+ /**
* Returns whether the given message is long and needs
* collapsing
*/
diff --git a/apps/comments/js/merged.json b/apps/comments/js/merged.json
index 66a63e88d17..0202c7ff55a 100644
--- a/apps/comments/js/merged.json
+++ b/apps/comments/js/merged.json
@@ -5,5 +5,7 @@
"commentsummarymodel.js",
"commentstabview.js",
"filesplugin.js",
- "activitytabviewplugin.js"
+ "activitytabviewplugin.js",
+ "vendor/Caret.js/dist/jquery.caret.min.js",
+ "vendor/At.js/dist/js/jquery.atwho.min.js"
]
diff --git a/apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js b/apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js
new file mode 100644
index 00000000000..d1e60152b4c
--- /dev/null
+++ b/apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js
@@ -0,0 +1 @@
+!function(t,e){"function"==typeof define&&define.amd?define(["jquery"],function(t){return e(t)}):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(this,function(t){var e,i;i={ESC:27,TAB:9,ENTER:13,CTRL:17,A:65,P:80,N:78,LEFT:37,UP:38,RIGHT:39,DOWN:40,BACKSPACE:8,SPACE:32},e={beforeSave:function(t){return r.arrayToDefaultHash(t)},matcher:function(t,e,i,n){var r,o,s,a,h;return t=t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),i&&(t="(?:^|\\s)"+t),r=decodeURI("%C3%80"),o=decodeURI("%C3%BF"),h=n?" ":"",a=new RegExp(t+"([A-Za-z"+r+"-"+o+"0-9_"+h+"'.+-]*)$|"+t+"([^\\x00-\\xff]*)$","gi"),s=a.exec(e),s?s[2]||s[1]:null},filter:function(t,e,i){var n,r,o,s;for(n=[],r=0,s=e.length;s>r;r++)o=e[r],~new String(o[i]).toLowerCase().indexOf(t.toLowerCase())&&n.push(o);return n},remoteFilter:null,sorter:function(t,e,i){var n,r,o,s;if(!t)return e;for(n=[],r=0,s=e.length;s>r;r++)o=e[r],o.atwho_order=new String(o[i]).toLowerCase().indexOf(t.toLowerCase()),o.atwho_order>-1&&n.push(o);return n.sort(function(t,e){return t.atwho_order-e.atwho_order})},tplEval:function(t,e){var i,n,r;r=t;try{return"string"!=typeof t&&(r=t(e)),r.replace(/\$\{([^\}]*)\}/g,function(t,i,n){return e[i]})}catch(n){return i=n,""}},highlighter:function(t,e){var i;return e?(i=new RegExp(">\\s*([^<]*?)("+e.replace("+","\\+")+")([^<]*)\\s*<","ig"),t.replace(i,function(t,e,i,n){return"> "+e+"<strong>"+i+"</strong>"+n+" <"})):t},beforeInsert:function(t,e,i){return t},beforeReposition:function(t){return t},afterMatchFailed:function(t,e){}};var n;n=function(){function e(e){this.currentFlag=null,this.controllers={},this.aliasMaps={},this.$inputor=t(e),this.setupRootElement(),this.listen()}return e.prototype.createContainer=function(e){var i;return null!=(i=this.$el)&&i.remove(),t(e.body).append(this.$el=t("<div class='atwho-container'></div>"))},e.prototype.setupRootElement=function(e,i){var n,r;if(null==i&&(i=!1),e)this.window=e.contentWindow,this.document=e.contentDocument||this.window.document,this.iframe=e;else{this.document=this.$inputor[0].ownerDocument,this.window=this.document.defaultView||this.document.parentWindow;try{this.iframe=this.window.frameElement}catch(r){if(n=r,this.iframe=null,t.fn.atwho.debug)throw new Error("iframe auto-discovery is failed.\nPlease use `setIframe` to set the target iframe manually.\n"+n)}}return this.createContainer((this.iframeAsRoot=i)?this.document:document)},e.prototype.controller=function(t){var e,i,n,r;if(this.aliasMaps[t])i=this.controllers[this.aliasMaps[t]];else{r=this.controllers;for(n in r)if(e=r[n],n===t){i=e;break}}return i?i:this.controllers[this.currentFlag]},e.prototype.setContextFor=function(t){return this.currentFlag=t,this},e.prototype.reg=function(t,e){var i,n;return n=(i=this.controllers)[t]||(i[t]=this.$inputor.is("[contentEditable]")?new l(this,t):new s(this,t)),e.alias&&(this.aliasMaps[e.alias]=t),n.init(e),this},e.prototype.listen=function(){return this.$inputor.on("compositionstart",function(t){return function(e){var i;return null!=(i=t.controller())&&i.view.hide(),t.isComposing=!0,null}}(this)).on("compositionend",function(t){return function(e){return t.isComposing=!1,setTimeout(function(e){return t.dispatch(e)}),null}}(this)).on("keyup.atwhoInner",function(t){return function(e){return t.onKeyup(e)}}(this)).on("keydown.atwhoInner",function(t){return function(e){return t.onKeydown(e)}}(this)).on("blur.atwhoInner",function(t){return function(e){var i;return(i=t.controller())?(i.expectedQueryCBId=null,i.view.hide(e,i.getOpt("displayTimeout"))):void 0}}(this)).on("click.atwhoInner",function(t){return function(e){return t.dispatch(e)}}(this)).on("scroll.atwhoInner",function(t){return function(){var e;return e=t.$inputor.scrollTop(),function(i){var n,r;return n=i.target.scrollTop,e!==n&&null!=(r=t.controller())&&r.view.hide(i),e=n,!0}}}(this)())},e.prototype.shutdown=function(){var t,e,i;i=this.controllers;for(t in i)e=i[t],e.destroy(),delete this.controllers[t];return this.$inputor.off(".atwhoInner"),this.$el.remove()},e.prototype.dispatch=function(t){var e,i,n,r;n=this.controllers,r=[];for(e in n)i=n[e],r.push(i.lookUp(t));return r},e.prototype.onKeyup=function(e){var n;switch(e.keyCode){case i.ESC:e.preventDefault(),null!=(n=this.controller())&&n.view.hide();break;case i.DOWN:case i.UP:case i.CTRL:case i.ENTER:t.noop();break;case i.P:case i.N:e.ctrlKey||this.dispatch(e);break;default:this.dispatch(e)}},e.prototype.onKeydown=function(e){var n,r;if(r=null!=(n=this.controller())?n.view:void 0,r&&r.visible())switch(e.keyCode){case i.ESC:e.preventDefault(),r.hide(e);break;case i.UP:e.preventDefault(),r.prev();break;case i.DOWN:e.preventDefault(),r.next();break;case i.P:if(!e.ctrlKey)return;e.preventDefault(),r.prev();break;case i.N:if(!e.ctrlKey)return;e.preventDefault(),r.next();break;case i.TAB:case i.ENTER:case i.SPACE:if(!r.visible())return;if(!this.controller().getOpt("spaceSelectsMatch")&&e.keyCode===i.SPACE)return;if(!this.controller().getOpt("tabSelectsMatch")&&e.keyCode===i.TAB)return;r.highlighted()?(e.preventDefault(),r.choose(e)):r.hide(e);break;default:t.noop()}},e}();var r,o=[].slice;r=function(){function i(e,i){this.app=e,this.at=i,this.$inputor=this.app.$inputor,this.id=this.$inputor[0].id||this.uid(),this.expectedQueryCBId=null,this.setting=null,this.query=null,this.pos=0,this.range=null,0===(this.$el=t("#atwho-ground-"+this.id,this.app.$el)).length&&this.app.$el.append(this.$el=t("<div id='atwho-ground-"+this.id+"'></div>")),this.model=new u(this),this.view=new c(this)}return i.prototype.uid=function(){return(Math.random().toString(16)+"000000000").substr(2,8)+(new Date).getTime()},i.prototype.init=function(e){return this.setting=t.extend({},this.setting||t.fn.atwho["default"],e),this.view.init(),this.model.reload(this.setting.data)},i.prototype.destroy=function(){return this.trigger("beforeDestroy"),this.model.destroy(),this.view.destroy(),this.$el.remove()},i.prototype.callDefault=function(){var i,n,r,s;s=arguments[0],i=2<=arguments.length?o.call(arguments,1):[];try{return e[s].apply(this,i)}catch(r){return n=r,t.error(n+" Or maybe At.js doesn't have function "+s)}},i.prototype.trigger=function(t,e){var i,n;return null==e&&(e=[]),e.push(this),i=this.getOpt("alias"),n=i?t+"-"+i+".atwho":t+".atwho",this.$inputor.trigger(n,e)},i.prototype.callbacks=function(t){return this.getOpt("callbacks")[t]||e[t]},i.prototype.getOpt=function(t,e){var i,n;try{return this.setting[t]}catch(n){return i=n,null}},i.prototype.insertContentFor=function(e){var i,n;return n=this.getOpt("insertTpl"),i=t.extend({},e.data("item-data"),{"atwho-at":this.at}),this.callbacks("tplEval").call(this,n,i,"onInsert")},i.prototype.renderView=function(t){var e;return e=this.getOpt("searchKey"),t=this.callbacks("sorter").call(this,this.query.text,t.slice(0,1001),e),this.view.render(t.slice(0,this.getOpt("limit")))},i.arrayToDefaultHash=function(e){var i,n,r,o;if(!t.isArray(e))return e;for(o=[],i=0,r=e.length;r>i;i++)n=e[i],t.isPlainObject(n)?o.push(n):o.push({name:n});return o},i.prototype.lookUp=function(t){var e,i;if((!t||"click"!==t.type||this.getOpt("lookUpOnClick"))&&(!this.getOpt("suspendOnComposing")||!this.app.isComposing))return(e=this.catchQuery(t))?(this.app.setContextFor(this.at),(i=this.getOpt("delay"))?this._delayLookUp(e,i):this._lookUp(e),e):(this.expectedQueryCBId=null,e)},i.prototype._delayLookUp=function(t,e){var i,n;return i=Date.now?Date.now():(new Date).getTime(),this.previousCallTime||(this.previousCallTime=i),n=e-(i-this.previousCallTime),n>0&&e>n?(this.previousCallTime=i,this._stopDelayedCall(),this.delayedCallTimeout=setTimeout(function(e){return function(){return e.previousCallTime=0,e.delayedCallTimeout=null,e._lookUp(t)}}(this),e)):(this._stopDelayedCall(),this.previousCallTime!==i&&(this.previousCallTime=0),this._lookUp(t))},i.prototype._stopDelayedCall=function(){return this.delayedCallTimeout?(clearTimeout(this.delayedCallTimeout),this.delayedCallTimeout=null):void 0},i.prototype._generateQueryCBId=function(){return{}},i.prototype._lookUp=function(e){var i;return i=function(t,e){return t===this.expectedQueryCBId?e&&e.length>0?this.renderView(this.constructor.arrayToDefaultHash(e)):this.view.hide():void 0},this.expectedQueryCBId=this._generateQueryCBId(),this.model.query(e.text,t.proxy(i,this,this.expectedQueryCBId))},i}();var s,a=function(t,e){function i(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype,t},h={}.hasOwnProperty;s=function(e){function i(){return i.__super__.constructor.apply(this,arguments)}return a(i,e),i.prototype.catchQuery=function(){var t,e,i,n,r,o,s;return e=this.$inputor.val(),t=this.$inputor.caret("pos",{iframe:this.app.iframe}),s=e.slice(0,t),r=this.callbacks("matcher").call(this,this.at,s,this.getOpt("startWithSpace"),this.getOpt("acceptSpaceBar")),n="string"==typeof r,n&&r.length<this.getOpt("minLen",0)?void 0:(n&&r.length<=this.getOpt("maxLen",20)?(o=t-r.length,i=o+r.length,this.pos=o,r={text:r,headPos:o,endPos:i},this.trigger("matched",[this.at,r.text])):(r=null,this.view.hide()),this.query=r)},i.prototype.rect=function(){var e,i,n;if(e=this.$inputor.caret("offset",this.pos-1,{iframe:this.app.iframe}))return this.app.iframe&&!this.app.iframeAsRoot&&(i=t(this.app.iframe).offset(),e.left+=i.left,e.top+=i.top),n=this.app.document.selection?0:2,{left:e.left,top:e.top,bottom:e.top+e.height+n}},i.prototype.insert=function(t,e){var i,n,r,o,s;return i=this.$inputor,n=i.val(),r=n.slice(0,Math.max(this.query.headPos-this.at.length,0)),o=""===(o=this.getOpt("suffix"))?o:o||" ",t+=o,s=""+r+t+n.slice(this.query.endPos||0),i.val(s),i.caret("pos",r.length+t.length,{iframe:this.app.iframe}),i.is(":focus")||i.focus(),i.change()},i}(r);var l,a=function(t,e){function i(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype,t},h={}.hasOwnProperty;l=function(e){function n(){return n.__super__.constructor.apply(this,arguments)}return a(n,e),n.prototype._getRange=function(){var t;return t=this.app.window.getSelection(),t.rangeCount>0?t.getRangeAt(0):void 0},n.prototype._setRange=function(e,i,n){return null==n&&(n=this._getRange()),n&&i?(i=t(i)[0],"after"===e?(n.setEndAfter(i),n.setStartAfter(i)):(n.setEndBefore(i),n.setStartBefore(i)),n.collapse(!1),this._clearRange(n)):void 0},n.prototype._clearRange=function(t){var e;return null==t&&(t=this._getRange()),e=this.app.window.getSelection(),null==this.ctrl_a_pressed?(e.removeAllRanges(),e.addRange(t)):void 0},n.prototype._movingEvent=function(t){var e;return"click"===t.type||(e=t.which)===i.RIGHT||e===i.LEFT||e===i.UP||e===i.DOWN},n.prototype._unwrap=function(e){var i;return e=t(e).unwrap().get(0),(i=e.nextSibling)&&i.nodeValue&&(e.nodeValue+=i.nodeValue,t(i).remove()),e},n.prototype.catchQuery=function(e){var n,r,o,s,a,h,l,u,c,p,f,d;if((d=this._getRange())&&d.collapsed){if(e.which===i.ENTER)return(r=t(d.startContainer).closest(".atwho-query")).contents().unwrap(),r.is(":empty")&&r.remove(),(r=t(".atwho-query",this.app.document)).text(r.text()).contents().last().unwrap(),void this._clearRange();if(/firefox/i.test(navigator.userAgent)){if(t(d.startContainer).is(this.$inputor))return void this._clearRange();e.which===i.BACKSPACE&&d.startContainer.nodeType===document.ELEMENT_NODE&&(c=d.startOffset-1)>=0?(o=d.cloneRange(),o.setStart(d.startContainer,c),t(o.cloneContents()).contents().last().is(".atwho-inserted")&&(a=t(d.startContainer).contents().get(c),this._setRange("after",t(a).contents().last()))):e.which===i.LEFT&&d.startContainer.nodeType===document.TEXT_NODE&&(n=t(d.startContainer.previousSibling),n.is(".atwho-inserted")&&0===d.startOffset&&this._setRange("after",n.contents().last()))}if(t(d.startContainer).closest(".atwho-inserted").addClass("atwho-query").siblings().removeClass("atwho-query"),(r=t(".atwho-query",this.app.document)).length>0&&r.is(":empty")&&0===r.text().length&&r.remove(),this._movingEvent(e)||r.removeClass("atwho-inserted"),r.length>0)switch(e.which){case i.LEFT:return this._setRange("before",r.get(0),d),void r.removeClass("atwho-query");case i.RIGHT:return this._setRange("after",r.get(0).nextSibling,d),void r.removeClass("atwho-query")}if(r.length>0&&(f=r.attr("data-atwho-at-query"))&&(r.empty().html(f).attr("data-atwho-at-query",null),this._setRange("after",r.get(0),d)),o=d.cloneRange(),o.setStart(d.startContainer,0),u=this.callbacks("matcher").call(this,this.at,o.toString(),this.getOpt("startWithSpace"),this.getOpt("acceptSpaceBar")),h="string"==typeof u,0===r.length&&h&&(s=d.startOffset-this.at.length-u.length)>=0&&(d.setStart(d.startContainer,s),r=t("<span/>",this.app.document).attr(this.getOpt("editableAtwhoQueryAttrs")).addClass("atwho-query"),d.surroundContents(r.get(0)),l=r.contents().last().get(0),l&&(/firefox/i.test(navigator.userAgent)?(d.setStart(l,l.length),d.setEnd(l,l.length),this._clearRange(d)):this._setRange("after",l,d))),!(h&&u.length<this.getOpt("minLen",0)))return h&&u.length<=this.getOpt("maxLen",20)?(p={text:u,el:r},this.trigger("matched",[this.at,p.text]),this.query=p):(this.view.hide(),this.query={el:r},r.text().indexOf(this.at)>=0&&(this._movingEvent(e)&&r.hasClass("atwho-inserted")?r.removeClass("atwho-query"):!1!==this.callbacks("afterMatchFailed").call(this,this.at,r)&&this._setRange("after",this._unwrap(r.text(r.text()).contents().first()))),null)}},n.prototype.rect=function(){var e,i,n;return n=this.query.el.offset(),n&&this.query.el[0].getClientRects().length?(this.app.iframe&&!this.app.iframeAsRoot&&(i=(e=t(this.app.iframe)).offset(),n.left+=i.left-this.$inputor.scrollLeft(),n.top+=i.top-this.$inputor.scrollTop()),n.bottom=n.top+this.query.el.height(),n):void 0},n.prototype.insert=function(t,e){var i,n,r,o,s;return this.$inputor.is(":focus")||this.$inputor.focus(),n=this.getOpt("functionOverrides"),n.insert?n.insert.call(this,t,e):(o=""===(o=this.getOpt("suffix"))?o:o||" ",i=e.data("item-data"),this.query.el.removeClass("atwho-query").addClass("atwho-inserted").html(t).attr("data-atwho-at-query",""+i["atwho-at"]+this.query.text).attr("contenteditable","false"),(r=this._getRange())&&(this.query.el.length&&r.setEndAfter(this.query.el[0]),r.collapse(!1),r.insertNode(s=this.app.document.createTextNode(""+o)),this._setRange("after",s,r)),this.$inputor.is(":focus")||this.$inputor.focus(),this.$inputor.change())},n}(r);var u;u=function(){function e(t){this.context=t,this.at=this.context.at,this.storage=this.context.$inputor}return e.prototype.destroy=function(){return this.storage.data(this.at,null)},e.prototype.saved=function(){return this.fetch()>0},e.prototype.query=function(t,e){var i,n,r;return n=this.fetch(),r=this.context.getOpt("searchKey"),n=this.context.callbacks("filter").call(this.context,t,n,r)||[],i=this.context.callbacks("remoteFilter"),n.length>0||!i&&0===n.length?e(n):i.call(this.context,t,e)},e.prototype.fetch=function(){return this.storage.data(this.at)||[]},e.prototype.save=function(t){return this.storage.data(this.at,this.context.callbacks("beforeSave").call(this.context,t||[]))},e.prototype.load=function(t){return!this.saved()&&t?this._load(t):void 0},e.prototype.reload=function(t){return this._load(t)},e.prototype._load=function(e){return"string"==typeof e?t.ajax(e,{dataType:"json"}).done(function(t){return function(e){return t.save(e)}}(this)):this.save(e)},e}();var c;c=function(){function e(e){this.context=e,this.$el=t("<div class='atwho-view'><ul class='atwho-view-ul'></ul></div>"),this.$elUl=this.$el.children(),this.timeoutID=null,this.context.$el.append(this.$el),this.bindEvent()}return e.prototype.init=function(){var t,e;return e=this.context.getOpt("alias")||this.context.at.charCodeAt(0),t=this.context.getOpt("headerTpl"),t&&1===this.$el.children().length&&this.$el.prepend(t),this.$el.attr({id:"at-view-"+e})},e.prototype.destroy=function(){return this.$el.remove()},e.prototype.bindEvent=function(){var e,i,n;return e=this.$el.find("ul"),i=0,n=0,e.on("mousemove.atwho-view","li",function(r){return function(r){var o;if((i!==r.clientX||n!==r.clientY)&&(i=r.clientX,n=r.clientY,o=t(r.currentTarget),!o.hasClass("cur")))return e.find(".cur").removeClass("cur"),o.addClass("cur")}}(this)).on("click.atwho-view","li",function(i){return function(n){return e.find(".cur").removeClass("cur"),t(n.currentTarget).addClass("cur"),i.choose(n),n.preventDefault()}}(this))},e.prototype.visible=function(){return t.expr.filters.visible(this.$el[0])},e.prototype.highlighted=function(){return this.$el.find(".cur").length>0},e.prototype.choose=function(t){var e,i;return(e=this.$el.find(".cur")).length&&(i=this.context.insertContentFor(e),this.context._stopDelayedCall(),this.context.insert(this.context.callbacks("beforeInsert").call(this.context,i,e,t),e),this.context.trigger("inserted",[e,t]),this.hide(t)),this.context.getOpt("hideWithoutSuffix")?this.stopShowing=!0:void 0},e.prototype.reposition=function(e){var i,n,r,o;return i=this.context.app.iframeAsRoot?this.context.app.window:window,e.bottom+this.$el.height()-t(i).scrollTop()>t(i).height()&&(e.bottom=e.top-this.$el.height()),e.left>(r=t(i).width()-this.$el.width()-5)&&(e.left=r),n={left:e.left,top:e.bottom},null!=(o=this.context.callbacks("beforeReposition"))&&o.call(this.context,n),this.$el.offset(n),this.context.trigger("reposition",[n])},e.prototype.next=function(){var t,e,i,n;return t=this.$el.find(".cur").removeClass("cur"),e=t.next(),e.length||(e=this.$el.find("li:first")),e.addClass("cur"),i=e[0],n=i.offsetTop+i.offsetHeight+(i.nextSibling?i.nextSibling.offsetHeight:0),this.scrollTop(Math.max(0,n-this.$el.height()))},e.prototype.prev=function(){var t,e,i,n;return t=this.$el.find(".cur").removeClass("cur"),i=t.prev(),i.length||(i=this.$el.find("li:last")),i.addClass("cur"),n=i[0],e=n.offsetTop+n.offsetHeight+(n.nextSibling?n.nextSibling.offsetHeight:0),this.scrollTop(Math.max(0,e-this.$el.height()))},e.prototype.scrollTop=function(t){var e;return e=this.context.getOpt("scrollDuration"),e?this.$elUl.animate({scrollTop:t},e):this.$elUl.scrollTop(t)},e.prototype.show=function(){var t;return this.stopShowing?void(this.stopShowing=!1):(this.visible()||(this.$el.show(),this.$el.scrollTop(0),this.context.trigger("shown")),(t=this.context.rect())?this.reposition(t):void 0)},e.prototype.hide=function(t,e){var i;if(this.visible())return isNaN(e)?(this.$el.hide(),this.context.trigger("hidden",[t])):(i=function(t){return function(){return t.hide()}}(this),clearTimeout(this.timeoutID),this.timeoutID=setTimeout(i,e))},e.prototype.render=function(e){var i,n,r,o,s,a,h;if(!(t.isArray(e)&&e.length>0))return void this.hide();for(this.$el.find("ul").empty(),n=this.$el.find("ul"),h=this.context.getOpt("displayTpl"),r=0,s=e.length;s>r;r++)o=e[r],o=t.extend({},o,{"atwho-at":this.context.at}),a=this.context.callbacks("tplEval").call(this.context,h,o,"onDisplay"),i=t(this.context.callbacks("highlighter").call(this.context,a,this.context.query.text)),i.data("item-data",o),n.append(i);return this.show(),this.context.getOpt("highlightFirst")?n.find("li:first").addClass("cur"):void 0},e}();var p;p={load:function(t,e){var i;return(i=this.controller(t))?i.model.load(e):void 0},isSelecting:function(){var t;return!!(null!=(t=this.controller())?t.view.visible():void 0)},hide:function(){var t;return null!=(t=this.controller())?t.view.hide():void 0},reposition:function(){var t;return(t=this.controller())?t.view.reposition(t.rect()):void 0},setIframe:function(t,e){return this.setupRootElement(t,e),null},run:function(){return this.dispatch()},destroy:function(){return this.shutdown(),this.$inputor.data("atwho",null)}},t.fn.atwho=function(e){var i,r;return i=arguments,r=null,this.filter('textarea, input, [contenteditable=""], [contenteditable=true]').each(function(){var o,s;return(s=(o=t(this)).data("atwho"))||o.data("atwho",s=new n(this)),"object"!=typeof e&&e?p[e]&&s?r=p[e].apply(s,Array.prototype.slice.call(i,1)):t.error("Method "+e+" does not exist on jQuery.atwho"):s.reg(e.at,e)}),null!=r?r:this},t.fn.atwho["default"]={at:void 0,alias:void 0,data:null,displayTpl:"<li>${name}</li>",insertTpl:"${atwho-at}${name}",headerTpl:null,callbacks:e,functionOverrides:{},searchKey:"name",suffix:void 0,hideWithoutSuffix:!1,startWithSpace:!0,acceptSpaceBar:!1,highlightFirst:!0,limit:5,maxLen:20,minLen:0,displayTimeout:300,delay:null,spaceSelectsMatch:!1,tabSelectsMatch:!0,editableAtwhoQueryAttrs:{},scrollDuration:150,suspendOnComposing:!0,lookUpOnClick:!0},t.fn.atwho.debug=!1}); \ No newline at end of file
diff --git a/apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js b/apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js
new file mode 100644
index 00000000000..a4d02eae247
--- /dev/null
+++ b/apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js
@@ -0,0 +1,2 @@
+/*! jquery.caret 2015-02-01 */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return a.returnExportsGlobal=b(c)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){"use strict";var b,c,d,e,f,g,h,i,j,k,l;k="caret",b=function(){function b(a){this.$inputor=a,this.domInputor=this.$inputor[0]}return b.prototype.setPos=function(){return this.domInputor},b.prototype.getIEPosition=function(){return this.getPosition()},b.prototype.getPosition=function(){var a,b;return b=this.getOffset(),a=this.$inputor.offset(),b.left-=a.left,b.top-=a.top,b},b.prototype.getOldIEPos=function(){var a,b;return b=h.selection.createRange(),a=h.body.createTextRange(),a.moveToElementText(this.domInputor),a.setEndPoint("EndToEnd",b),a.text.length},b.prototype.getPos=function(){var a,b,c;return(c=this.range())?(a=c.cloneRange(),a.selectNodeContents(this.domInputor),a.setEnd(c.endContainer,c.endOffset),b=a.toString().length,a.detach(),b):h.selection?this.getOldIEPos():void 0},b.prototype.getOldIEOffset=function(){var a,b;return a=h.selection.createRange().duplicate(),a.moveStart("character",-1),b=a.getBoundingClientRect(),{height:b.bottom-b.top,left:b.left,top:b.top}},b.prototype.getOffset=function(){var b,c,d,e,f;return j.getSelection&&(d=this.range())?(d.endOffset-1>0&&d.endContainer===!this.domInputor&&(b=d.cloneRange(),b.setStart(d.endContainer,d.endOffset-1),b.setEnd(d.endContainer,d.endOffset),e=b.getBoundingClientRect(),c={height:e.height,left:e.left+e.width,top:e.top},b.detach()),c&&0!==(null!=c?c.height:void 0)||(b=d.cloneRange(),f=a(h.createTextNode("|")),b.insertNode(f[0]),b.selectNode(f[0]),e=b.getBoundingClientRect(),c={height:e.height,left:e.left,top:e.top},f.remove(),b.detach())):h.selection&&(c=this.getOldIEOffset()),c&&(c.top+=a(j).scrollTop(),c.left+=a(j).scrollLeft()),c},b.prototype.range=function(){var a;if(j.getSelection)return a=j.getSelection(),a.rangeCount>0?a.getRangeAt(0):null},b}(),c=function(){function b(a){this.$inputor=a,this.domInputor=this.$inputor[0]}return b.prototype.getIEPos=function(){var a,b,c,d,e,f,g;return b=this.domInputor,f=h.selection.createRange(),e=0,f&&f.parentElement()===b&&(d=b.value.replace(/\r\n/g,"\n"),c=d.length,g=b.createTextRange(),g.moveToBookmark(f.getBookmark()),a=b.createTextRange(),a.collapse(!1),e=g.compareEndPoints("StartToEnd",a)>-1?c:-g.moveStart("character",-c)),e},b.prototype.getPos=function(){return h.selection?this.getIEPos():this.domInputor.selectionStart},b.prototype.setPos=function(a){var b,c;return b=this.domInputor,h.selection?(c=b.createTextRange(),c.move("character",a),c.select()):b.setSelectionRange&&b.setSelectionRange(a,a),b},b.prototype.getIEOffset=function(a){var b,c,d,e;return c=this.domInputor.createTextRange(),a||(a=this.getPos()),c.move("character",a),d=c.boundingLeft,e=c.boundingTop,b=c.boundingHeight,{left:d,top:e,height:b}},b.prototype.getOffset=function(b){var c,d,e;return c=this.$inputor,h.selection?(d=this.getIEOffset(b),d.top+=a(j).scrollTop()+c.scrollTop(),d.left+=a(j).scrollLeft()+c.scrollLeft(),d):(d=c.offset(),e=this.getPosition(b),d={left:d.left+e.left-c.scrollLeft(),top:d.top+e.top-c.scrollTop(),height:e.height})},b.prototype.getPosition=function(a){var b,c,e,f,g,h,i;return b=this.$inputor,f=function(a){return a=a.replace(/<|>|`|"|&/g,"?").replace(/\r\n|\r|\n/g,"<br/>"),/firefox/i.test(navigator.userAgent)&&(a=a.replace(/\s/g,"&nbsp;")),a},void 0===a&&(a=this.getPos()),i=b.val().slice(0,a),e=b.val().slice(a),g="<span style='position: relative; display: inline;'>"+f(i)+"</span>",g+="<span id='caret' style='position: relative; display: inline;'>|</span>",g+="<span style='position: relative; display: inline;'>"+f(e)+"</span>",h=new d(b),c=h.create(g).rect()},b.prototype.getIEPosition=function(a){var b,c,d,e,f;return d=this.getIEOffset(a),c=this.$inputor.offset(),e=d.left-c.left,f=d.top-c.top,b=d.height,{left:e,top:f,height:b}},b}(),d=function(){function b(a){this.$inputor=a}return b.prototype.css_attr=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","boxSizing","fontFamily","fontSize","fontWeight","height","letterSpacing","lineHeight","marginBottom","marginLeft","marginRight","marginTop","outlineWidth","overflow","overflowX","overflowY","paddingBottom","paddingLeft","paddingRight","paddingTop","textAlign","textOverflow","textTransform","whiteSpace","wordBreak","wordWrap"],b.prototype.mirrorCss=function(){var b,c=this;return b={position:"absolute",left:-9999,top:0,zIndex:-2e4},"TEXTAREA"===this.$inputor.prop("tagName")&&this.css_attr.push("width"),a.each(this.css_attr,function(a,d){return b[d]=c.$inputor.css(d)}),b},b.prototype.create=function(b){return this.$mirror=a("<div></div>"),this.$mirror.css(this.mirrorCss()),this.$mirror.html(b),this.$inputor.after(this.$mirror),this},b.prototype.rect=function(){var a,b,c;return a=this.$mirror.find("#caret"),b=a.position(),c={left:b.left,top:b.top,height:a.height()},this.$mirror.remove(),c},b}(),e={contentEditable:function(a){return!(!a[0].contentEditable||"true"!==a[0].contentEditable)}},g={pos:function(a){return a||0===a?this.setPos(a):this.getPos()},position:function(a){return h.selection?this.getIEPosition(a):this.getPosition(a)},offset:function(a){var b;return b=this.getOffset(a)}},h=null,j=null,i=null,l=function(a){var b;return(b=null!=a?a.iframe:void 0)?(i=b,j=b.contentWindow,h=b.contentDocument||j.document):(i=void 0,j=window,h=document)},f=function(a){var b;h=a[0].ownerDocument,j=h.defaultView||h.parentWindow;try{return i=j.frameElement}catch(c){b=c}},a.fn.caret=function(d,f,h){var i;return g[d]?(a.isPlainObject(f)?(l(f),f=void 0):l(h),i=e.contentEditable(this)?new b(this):new c(this),g[d].apply(i,[f])):a.error("Method "+d+" does not exist on jQuery.caret")},a.fn.caret.EditableCaret=b,a.fn.caret.InputCaret=c,a.fn.caret.Utils=e,a.fn.caret.apis=g}); \ No newline at end of file
diff --git a/apps/comments/l10n/es_CR.js b/apps/comments/l10n/es_CR.js
new file mode 100644
index 00000000000..e291a497795
--- /dev/null
+++ b/apps/comments/l10n/es_CR.js
@@ -0,0 +1,34 @@
+OC.L10N.register(
+ "comments",
+ {
+ "Comments" : "Comentarios",
+ "Unknown user" : "Usuario desconocido",
+ "New comment …" : "Comentario nuevo ...",
+ "Delete comment" : "Borrar comentario",
+ "Post" : "Publicar",
+ "Cancel" : "Cancelar",
+ "Edit comment" : "Editar comentario",
+ "[Deleted user]" : "[Usuario borrado]",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "More comments …" : "Más comentarios ...",
+ "Save" : "Guardar",
+ "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Se presentó un error al recuperar el comentario con Id {id}",
+ "Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
+ "Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
+ "Comment" : "Comentario",
+ "You commented" : "Comentaste",
+ "%1$s commented" : "%1$s comentó",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/es_CR.json b/apps/comments/l10n/es_CR.json
new file mode 100644
index 00000000000..1a9e2231489
--- /dev/null
+++ b/apps/comments/l10n/es_CR.json
@@ -0,0 +1,32 @@
+{ "translations": {
+ "Comments" : "Comentarios",
+ "Unknown user" : "Usuario desconocido",
+ "New comment …" : "Comentario nuevo ...",
+ "Delete comment" : "Borrar comentario",
+ "Post" : "Publicar",
+ "Cancel" : "Cancelar",
+ "Edit comment" : "Editar comentario",
+ "[Deleted user]" : "[Usuario borrado]",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "More comments …" : "Más comentarios ...",
+ "Save" : "Guardar",
+ "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Se presentó un error al recuperar el comentario con Id {id}",
+ "Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
+ "Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
+ "Comment" : "Comentario",
+ "You commented" : "Comentaste",
+ "%1$s commented" : "%1$s comentó",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/comments/l10n/es_DO.js b/apps/comments/l10n/es_DO.js
new file mode 100644
index 00000000000..e291a497795
--- /dev/null
+++ b/apps/comments/l10n/es_DO.js
@@ -0,0 +1,34 @@
+OC.L10N.register(
+ "comments",
+ {
+ "Comments" : "Comentarios",
+ "Unknown user" : "Usuario desconocido",
+ "New comment …" : "Comentario nuevo ...",
+ "Delete comment" : "Borrar comentario",
+ "Post" : "Publicar",
+ "Cancel" : "Cancelar",
+ "Edit comment" : "Editar comentario",
+ "[Deleted user]" : "[Usuario borrado]",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "More comments …" : "Más comentarios ...",
+ "Save" : "Guardar",
+ "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Se presentó un error al recuperar el comentario con Id {id}",
+ "Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
+ "Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
+ "Comment" : "Comentario",
+ "You commented" : "Comentaste",
+ "%1$s commented" : "%1$s comentó",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/es_DO.json b/apps/comments/l10n/es_DO.json
new file mode 100644
index 00000000000..1a9e2231489
--- /dev/null
+++ b/apps/comments/l10n/es_DO.json
@@ -0,0 +1,32 @@
+{ "translations": {
+ "Comments" : "Comentarios",
+ "Unknown user" : "Usuario desconocido",
+ "New comment …" : "Comentario nuevo ...",
+ "Delete comment" : "Borrar comentario",
+ "Post" : "Publicar",
+ "Cancel" : "Cancelar",
+ "Edit comment" : "Editar comentario",
+ "[Deleted user]" : "[Usuario borrado]",
+ "No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
+ "More comments …" : "Más comentarios ...",
+ "Save" : "Guardar",
+ "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Se presentó un error al recuperar el comentario con Id {id}",
+ "Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
+ "Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
+ "Comment" : "Comentario",
+ "You commented" : "Comentaste",
+ "%1$s commented" : "%1$s comentó",
+ "{author} commented" : "{author} comentó",
+ "You commented on %1$s" : "Usted comentó en %1$s",
+ "You commented on {file}" : "Hiciste un comentario de {file}",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "{author} commented on {file}" : "{author} comentó en {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/comments/lib/Activity/Provider.php b/apps/comments/lib/Activity/Provider.php
index a691d7dd644..41ab8ea8b8e 100644
--- a/apps/comments/lib/Activity/Provider.php
+++ b/apps/comments/lib/Activity/Provider.php
@@ -174,6 +174,12 @@ class Provider implements IProvider {
}
// Fix subjects from 12.0.3 and older
+ //
+ // Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
return [
'actor' => $subjectParameters[0],
'fileId' => (int) $event->getObjectId(),
diff --git a/apps/comments/lib/AppInfo/Application.php b/apps/comments/lib/AppInfo/Application.php
index f168779cd0d..a863ca506b7 100644
--- a/apps/comments/lib/AppInfo/Application.php
+++ b/apps/comments/lib/AppInfo/Application.php
@@ -22,7 +22,9 @@
namespace OCA\Comments\AppInfo;
use OCA\Comments\Controller\Notifications;
+use OCA\Comments\JSSettingsHelper;
use OCP\AppFramework\App;
+use OCP\Util;
class Application extends App {
@@ -31,5 +33,8 @@ class Application extends App {
$container = $this->getContainer();
$container->registerAlias('NotificationsController', Notifications::class);
+
+ $jsSettingsHelper = new JSSettingsHelper($container->getServer());
+ Util::connectHook('\OCP\Config', 'js', $jsSettingsHelper, 'extend');
}
}
diff --git a/apps/comments/lib/Collaboration/CommentersSorter.php b/apps/comments/lib/Collaboration/CommentersSorter.php
new file mode 100644
index 00000000000..b8bb745b3b8
--- /dev/null
+++ b/apps/comments/lib/Collaboration/CommentersSorter.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Comments\Collaboration;
+
+
+use OCP\Collaboration\AutoComplete\ISorter;
+use OCP\Comments\ICommentsManager;
+
+class CommentersSorter implements ISorter {
+
+ /** @var ICommentsManager */
+ private $commentsManager;
+
+ public function __construct(ICommentsManager $commentsManager) {
+ $this->commentsManager = $commentsManager;
+ }
+
+ public function getId() {
+ return 'commenters';
+ }
+
+ /**
+ * Sorts people who commented on the given item atop (descelating) of the
+ * others
+ *
+ * @param array $sortArray
+ * @param array $context
+ */
+ public function sort(array &$sortArray, array $context) {
+ $commenters = $this->retrieveCommentsInformation($context['itemType'], $context['itemId']);
+ if(count($commenters) === 0) {
+ return;
+ }
+
+ foreach ($sortArray as $type => &$byType) {
+ if(!isset($commenters[$type])) {
+ continue;
+ }
+
+ // at least on PHP 5.6 usort turned out to be not stable. So we add
+ // the current index to the value and compare it on a draw
+ $i = 0;
+ $workArray = array_map(function($element) use (&$i) {
+ return [$i++, $element];
+ }, $byType);
+
+ usort($workArray, function ($a, $b) use ($commenters, $type) {
+ $r = $this->compare($a[1], $b[1], $commenters[$type]);
+ if($r === 0) {
+ $r = $a[0] - $b[0];
+ }
+ return $r;
+ });
+
+ // and remove the index values again
+ $byType = array_column($workArray, 1);
+ }
+ }
+
+ /**
+ * @param $type
+ * @param $id
+ * @return array
+ */
+ protected function retrieveCommentsInformation($type, $id) {
+ $comments = $this->commentsManager->getForObject($type, $id);
+ if(count($comments) === 0) {
+ return [];
+ }
+
+ $actors = [];
+ foreach ($comments as $comment) {
+ if(!isset($actors[$comment->getActorType()])) {
+ $actors[$comment->getActorType()] = [];
+ }
+ if(!isset($actors[$comment->getActorType()][$comment->getActorId()])) {
+ $actors[$comment->getActorType()][$comment->getActorId()] = 1;
+ } else {
+ $actors[$comment->getActorType()][$comment->getActorId()]++;
+ }
+ }
+ return $actors;
+ }
+
+ protected function compare(array $a, array $b, array $commenters) {
+ $a = $a['value']['shareWith'];
+ $b = $b['value']['shareWith'];
+
+ $valueA = isset($commenters[$a]) ? $commenters[$a] : 0;
+ $valueB = isset($commenters[$b]) ? $commenters[$b] : 0;
+
+ return $valueB - $valueA;
+ }
+}
diff --git a/apps/comments/lib/JSSettingsHelper.php b/apps/comments/lib/JSSettingsHelper.php
new file mode 100644
index 00000000000..dab68a48925
--- /dev/null
+++ b/apps/comments/lib/JSSettingsHelper.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Comments;
+
+
+use OCP\IServerContainer;
+
+class JSSettingsHelper {
+ /** @var IServerContainer */
+ private $c;
+
+ public function __construct(IServerContainer $c) {
+ $this->c = $c;
+ }
+
+ public function extend(array $settings) {
+ $appConfig = json_decode($settings['array']['oc_appconfig'], true);
+
+ $value = (int)$this->c->getConfig()->getAppValue('comments', 'maxAutoCompleteResults', 10);
+ $appConfig['comments']['maxAutoCompleteResults'] = $value;
+
+ $settings['array']['oc_appconfig'] = json_encode($appConfig);
+ }
+}
diff --git a/apps/comments/tests/Unit/Collaboration/CommentersSorterTest.php b/apps/comments/tests/Unit/Collaboration/CommentersSorterTest.php
new file mode 100644
index 00000000000..0cc3e3d4b61
--- /dev/null
+++ b/apps/comments/tests/Unit/Collaboration/CommentersSorterTest.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Comments\Tests\Unit\Collaboration;
+
+
+use OCA\Comments\Collaboration\CommentersSorter;
+use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
+use OCP\IConfig;
+use Test\TestCase;
+
+class CommentersSorterTest extends TestCase {
+ /** @var ICommentsManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $commentsManager;
+ /** @var CommentersSorter */
+ protected $sorter;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->commentsManager = $this->createMock(ICommentsManager::class);
+
+ $this->sorter = new CommentersSorter($this->commentsManager);
+ }
+
+ /**
+ * @dataProvider sortDataProvider
+ * @param $data
+ */
+ public function testSort($data) {
+ $commentMocks = [];
+ foreach($data['actors'] as $actorType => $actors) {
+ foreach ($actors as $actorId => $noOfComments) {
+ for($i=0;$i<$noOfComments;$i++) {
+ $mock = $this->createMock(IComment::class);
+ $mock->expects($this->atLeastOnce())
+ ->method('getActorType')
+ ->willReturn($actorType);
+ $mock->expects($this->atLeastOnce())
+ ->method('getActorId')
+ ->willReturn($actorId);
+ $commentMocks[] = $mock;
+ }
+ }
+ }
+
+ $this->commentsManager->expects($this->once())
+ ->method('getForObject')
+ ->willReturn($commentMocks);
+
+ $workArray = $data['input'];
+ $this->sorter->sort($workArray, ['itemType' => 'files', 'itemId' => '24']);
+
+ $this->assertEquals($data['expected'], $workArray);
+ }
+
+ public function sortDataProvider() {
+ return [[
+ [
+ #1 – sort properly and otherwise keep existing order
+ 'actors' => ['users' => ['celia' => 3, 'darius' => 7, 'faruk' => 5, 'gail' => 5], 'bots' => ['r2-d2' => 8]],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'elena']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'r2-d2']],
+ ['value' => ['shareWith' => 'c-3po']],
+ ]
+ ],
+ ],
+ [
+ #2 – no commentors, input equals output
+ 'actors' => [],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ ],
+ [
+ #3 – no nothing
+ 'actors' => [],
+ 'input' => [],
+ 'expected' => [],
+ ],
+ ]];
+ }
+}
diff --git a/apps/comments/tests/Unit/JSSettingsHelperTest.php b/apps/comments/tests/Unit/JSSettingsHelperTest.php
new file mode 100644
index 00000000000..ad2f34c7aab
--- /dev/null
+++ b/apps/comments/tests/Unit/JSSettingsHelperTest.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Comments\Tests\Unit;
+
+use OCA\Comments\JSSettingsHelper;
+use OCP\IConfig;
+use OCP\IServerContainer;
+use Test\TestCase;
+
+class JSSettingsHelperTest extends TestCase {
+ /** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */
+ protected $c;
+ /** @var JSSettingsHelper */
+ protected $helper;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->c = $this->createMock(IServerContainer::class);
+
+ $this->helper = new JSSettingsHelper($this->c);
+ }
+
+ public function testExtend() {
+ $config = $this->createMock(IConfig::class);
+ $config->expects($this->once())
+ ->method('getAppValue')
+ ->with('comments', 'maxAutoCompleteResults')
+ ->willReturn(13);
+
+ $this->c->expects($this->once())
+ ->method('getConfig')
+ ->willReturn($config);
+
+ $config = [
+ 'oc_appconfig' => json_encode([
+ 'anotherapp' => [
+ 'foo' => 'bar',
+ 'foobar' => true
+ ]
+ ])
+ ];
+
+ $this->helper->extend(['array' => &$config]);
+
+ $appConfig = json_decode($config['oc_appconfig'], true);
+ $this->assertTrue(isset($appConfig['comments']));
+ $this->assertTrue(isset($appConfig['anotherapp']));
+ $this->assertSame(2, count($appConfig['anotherapp']));
+ $this->assertSame(13, $appConfig['comments']['maxAutoCompleteResults']);
+ }
+}
diff --git a/apps/comments/tests/js/commentstabviewSpec.js b/apps/comments/tests/js/commentstabviewSpec.js
index 63a27956f9f..8b99ad081cd 100644
--- a/apps/comments/tests/js/commentstabviewSpec.js
+++ b/apps/comments/tests/js/commentstabviewSpec.js
@@ -157,7 +157,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
expect($comment.find('.avatar[data-user=macbeth] ~ .contactsmenu-popover').length).toEqual(1);
expect($comment.find('.avatar[data-user=banquo]').length).toEqual(1);
- expect($comment.find('.avatar-name-wrapper:last-child strong').text()).toEqual('Lord Banquo');
+ expect($comment.find('.avatar[data-user=banquo] ~ strong').text()).toEqual('Lord Banquo');
expect($comment.find('.avatar[data-user=banquo] ~ .contactsmenu-popover').length).toEqual(1);
});
@@ -239,7 +239,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
});
it('creates a new comment when clicking post button', function() {
- view.$el.find('.message').val('New message');
+ view.$el.find('.message').text('New message');
view.$el.find('form').submit();
expect(createStub.calledOnce).toEqual(true);
@@ -253,7 +253,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
});
});
it('creates a new comment with mentions when clicking post button', function() {
- view.$el.find('.message').val('New message @anotheruser');
+ view.$el.find('.message').text('New message @anotheruser');
view.$el.find('form').submit();
var createStubExpectedData = {
@@ -439,7 +439,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
var $formRow = view.$el.find('.newCommentRow.comment[data-id=1]');
expect($formRow.length).toEqual(1);
- $formRow.find('textarea').val('modified message');
+ $formRow.find('div.message').text('modified message');
$formRow.find('form').submit();
expect(saveStub.calledOnce).toEqual(true);
@@ -451,8 +451,9 @@ describe('OCA.Comments.CommentsTabView tests', function() {
// simulate the fact that save sets the attribute
model.set('message', 'modified\nmessage');
saveStub.yieldTo('success', model);
+ view.collection.get(model);
- expect(fetchStub.calledOnce).toEqual(true);
+ expect(fetchStub.called).toEqual(true);
fetchStub.yieldTo('success', model);
// original comment element is visible again
@@ -472,7 +473,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
var $formRow = view.$el.find('.newCommentRow.comment[data-id=3]');
expect($formRow.length).toEqual(1);
- $formRow.find('textarea').val('modified\nmessage @anotheruser');
+ $formRow.find('div.message').text('modified\nmessage @anotheruser');
$formRow.find('form').submit();
expect(saveStub.calledOnce).toEqual(true);
@@ -485,7 +486,7 @@ describe('OCA.Comments.CommentsTabView tests', function() {
model.set('message', 'modified\nmessage @anotheruser');
saveStub.yieldTo('success', model);
- expect(fetchStub.calledOnce).toEqual(true);
+ expect(fetchStub.called).toEqual(true);
// simulate the fact that fetch sets the attribute
model.set('mentions', {
diff --git a/apps/dav/composer/autoload.php b/apps/dav/composer/autoload.php
new file mode 100644
index 00000000000..06b2e993e94
--- /dev/null
+++ b/apps/dav/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitDAV::getLoader();
diff --git a/apps/dav/composer/composer.json b/apps/dav/composer/composer.json
new file mode 100644
index 00000000000..e783ae8ad15
--- /dev/null
+++ b/apps/dav/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "DAV"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\DAV\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/dav/composer/composer/ClassLoader.php b/apps/dav/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/dav/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/dav/composer/composer/LICENSE b/apps/dav/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/dav/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..f29e3a7b293
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_classmap.php
@@ -0,0 +1,145 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\DAV\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\DAV\\AppInfo\\PluginManager' => $baseDir . '/../lib/AppInfo/PluginManager.php',
+ 'OCA\\DAV\\Avatars\\AvatarHome' => $baseDir . '/../lib/Avatars/AvatarHome.php',
+ 'OCA\\DAV\\Avatars\\AvatarNode' => $baseDir . '/../lib/Avatars/AvatarNode.php',
+ 'OCA\\DAV\\Avatars\\RootCollection' => $baseDir . '/../lib/Avatars/RootCollection.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Backend' => $baseDir . '/../lib/CalDAV/Activity/Backend.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Filter/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Filter/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Base' => $baseDir . '/../lib/CalDAV/Activity/Provider/Base.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Provider/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Event' => $baseDir . '/../lib/CalDAV/Activity/Provider/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Provider/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Setting/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => $baseDir . '/../lib/CalDAV/Activity/Setting/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Setting/Todo.php',
+ 'OCA\\DAV\\CalDAV\\BirthdayService' => $baseDir . '/../lib/CalDAV/BirthdayService.php',
+ 'OCA\\DAV\\CalDAV\\CalDavBackend' => $baseDir . '/../lib/CalDAV/CalDavBackend.php',
+ 'OCA\\DAV\\CalDAV\\Calendar' => $baseDir . '/../lib/CalDAV/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\CalendarHome' => $baseDir . '/../lib/CalDAV/CalendarHome.php',
+ 'OCA\\DAV\\CalDAV\\CalendarObject' => $baseDir . '/../lib/CalDAV/CalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\CalendarRoot' => $baseDir . '/../lib/CalDAV/CalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Plugin' => $baseDir . '/../lib/CalDAV/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendar' => $baseDir . '/../lib/CalDAV/PublicCalendar.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarObject' => $baseDir . '/../lib/CalDAV/PublicCalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarRoot' => $baseDir . '/../lib/CalDAV/PublicCalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\PublishPlugin' => $baseDir . '/../lib/CalDAV/Publishing/PublishPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\Xml\\Publisher' => $baseDir . '/../lib/CalDAV/Publishing/Xml/Publisher.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\IMipPlugin' => $baseDir . '/../lib/CalDAV/Schedule/IMipPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\Plugin' => $baseDir . '/../lib/CalDAV/Schedule/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\SearchPlugin' => $baseDir . '/../lib/CalDAV/Search/SearchPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/CompFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/LimitFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/OffsetFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/ParamFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/PropFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter' => $baseDir . '/../lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport' => $baseDir . '/../lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php',
+ 'OCA\\DAV\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\DAV\\CardDAV\\AddressBook' => $baseDir . '/../lib/CardDAV/AddressBook.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookImpl' => $baseDir . '/../lib/CardDAV/AddressBookImpl.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookRoot' => $baseDir . '/../lib/CardDAV/AddressBookRoot.php',
+ 'OCA\\DAV\\CardDAV\\CardDavBackend' => $baseDir . '/../lib/CardDAV/CardDavBackend.php',
+ 'OCA\\DAV\\CardDAV\\ContactsManager' => $baseDir . '/../lib/CardDAV/ContactsManager.php',
+ 'OCA\\DAV\\CardDAV\\Converter' => $baseDir . '/../lib/CardDAV/Converter.php',
+ 'OCA\\DAV\\CardDAV\\ImageExportPlugin' => $baseDir . '/../lib/CardDAV/ImageExportPlugin.php',
+ 'OCA\\DAV\\CardDAV\\PhotoCache' => $baseDir . '/../lib/CardDAV/PhotoCache.php',
+ 'OCA\\DAV\\CardDAV\\Plugin' => $baseDir . '/../lib/CardDAV/Plugin.php',
+ 'OCA\\DAV\\CardDAV\\SyncJob' => $baseDir . '/../lib/CardDAV/SyncJob.php',
+ 'OCA\\DAV\\CardDAV\\SyncService' => $baseDir . '/../lib/CardDAV/SyncService.php',
+ 'OCA\\DAV\\CardDAV\\UserAddressBooks' => $baseDir . '/../lib/CardDAV/UserAddressBooks.php',
+ 'OCA\\DAV\\CardDAV\\Xml\\Groups' => $baseDir . '/../lib/CardDAV/Xml/Groups.php',
+ 'OCA\\DAV\\Command\\CreateAddressBook' => $baseDir . '/../lib/Command/CreateAddressBook.php',
+ 'OCA\\DAV\\Command\\CreateCalendar' => $baseDir . '/../lib/Command/CreateCalendar.php',
+ 'OCA\\DAV\\Command\\SyncBirthdayCalendar' => $baseDir . '/../lib/Command/SyncBirthdayCalendar.php',
+ 'OCA\\DAV\\Command\\SyncSystemAddressBook' => $baseDir . '/../lib/Command/SyncSystemAddressBook.php',
+ 'OCA\\DAV\\Comments\\CommentNode' => $baseDir . '/../lib/Comments/CommentNode.php',
+ 'OCA\\DAV\\Comments\\CommentsPlugin' => $baseDir . '/../lib/Comments/CommentsPlugin.php',
+ 'OCA\\DAV\\Comments\\EntityCollection' => $baseDir . '/../lib/Comments/EntityCollection.php',
+ 'OCA\\DAV\\Comments\\EntityTypeCollection' => $baseDir . '/../lib/Comments/EntityTypeCollection.php',
+ 'OCA\\DAV\\Comments\\RootCollection' => $baseDir . '/../lib/Comments/RootCollection.php',
+ 'OCA\\DAV\\Connector\\LegacyDAVACL' => $baseDir . '/../lib/Connector/LegacyDAVACL.php',
+ 'OCA\\DAV\\Connector\\PublicAuth' => $baseDir . '/../lib/Connector/PublicAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\AppEnabledPlugin' => $baseDir . '/../lib/Connector/Sabre/AppEnabledPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Auth' => $baseDir . '/../lib/Connector/Sabre/Auth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BearerAuth' => $baseDir . '/../lib/Connector/Sabre/BearerAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BlockLegacyClientPlugin' => $baseDir . '/../lib/Connector/Sabre/BlockLegacyClientPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CachingTree' => $baseDir . '/../lib/Connector/Sabre/CachingTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ChecksumList' => $baseDir . '/../lib/Connector/Sabre/ChecksumList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin' => $baseDir . '/../lib/Connector/Sabre/CommentPropertiesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CopyEtagHeaderPlugin' => $baseDir . '/../lib/Connector/Sabre/CopyEtagHeaderPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CustomPropertiesBackend' => $baseDir . '/../lib/Connector/Sabre/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DavAclPlugin' => $baseDir . '/../lib/Connector/Sabre/DavAclPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Directory' => $baseDir . '/../lib/Connector/Sabre/Directory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DummyGetResponsePlugin' => $baseDir . '/../lib/Connector/Sabre/DummyGetResponsePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ExceptionLoggerPlugin' => $baseDir . '/../lib/Connector/Sabre/ExceptionLoggerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\EntityTooLarge' => $baseDir . '/../lib/Connector/Sabre/Exception/EntityTooLarge.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\FileLocked' => $baseDir . '/../lib/Connector/Sabre/Exception/FileLocked.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\Forbidden' => $baseDir . '/../lib/Connector/Sabre/Exception/Forbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\InvalidPath' => $baseDir . '/../lib/Connector/Sabre/Exception/InvalidPath.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\PasswordLoginForbidden' => $baseDir . '/../lib/Connector/Sabre/Exception/PasswordLoginForbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\UnsupportedMediaType' => $baseDir . '/../lib/Connector/Sabre/Exception/UnsupportedMediaType.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FakeLockerPlugin' => $baseDir . '/../lib/Connector/Sabre/FakeLockerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\File' => $baseDir . '/../lib/Connector/Sabre/File.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesPlugin' => $baseDir . '/../lib/Connector/Sabre/FilesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesReportPlugin' => $baseDir . '/../lib/Connector/Sabre/FilesReportPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\LockPlugin' => $baseDir . '/../lib/Connector/Sabre/LockPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\MaintenancePlugin' => $baseDir . '/../lib/Connector/Sabre/MaintenancePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Node' => $baseDir . '/../lib/Connector/Sabre/Node.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ObjectTree' => $baseDir . '/../lib/Connector/Sabre/ObjectTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Principal' => $baseDir . '/../lib/Connector/Sabre/Principal.php',
+ 'OCA\\DAV\\Connector\\Sabre\\QuotaPlugin' => $baseDir . '/../lib/Connector/Sabre/QuotaPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Server' => $baseDir . '/../lib/Connector/Sabre/Server.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ServerFactory' => $baseDir . '/../lib/Connector/Sabre/ServerFactory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ShareTypeList' => $baseDir . '/../lib/Connector/Sabre/ShareTypeList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => $baseDir . '/../lib/Connector/Sabre/SharesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagList' => $baseDir . '/../lib/Connector/Sabre/TagList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => $baseDir . '/../lib/Connector/Sabre/TagsPlugin.php',
+ 'OCA\\DAV\\DAV\\CustomPropertiesBackend' => $baseDir . '/../lib/DAV/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\DAV\\GroupPrincipalBackend' => $baseDir . '/../lib/DAV/GroupPrincipalBackend.php',
+ 'OCA\\DAV\\DAV\\PublicAuth' => $baseDir . '/../lib/DAV/PublicAuth.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Backend' => $baseDir . '/../lib/DAV/Sharing/Backend.php',
+ 'OCA\\DAV\\DAV\\Sharing\\IShareable' => $baseDir . '/../lib/DAV/Sharing/IShareable.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Plugin' => $baseDir . '/../lib/DAV/Sharing/Plugin.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\Invite' => $baseDir . '/../lib/DAV/Sharing/Xml/Invite.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\ShareRequest' => $baseDir . '/../lib/DAV/Sharing/Xml/ShareRequest.php',
+ 'OCA\\DAV\\DAV\\SystemPrincipalBackend' => $baseDir . '/../lib/DAV/SystemPrincipalBackend.php',
+ 'OCA\\DAV\\Files\\BrowserErrorPagePlugin' => $baseDir . '/../lib/Files/BrowserErrorPagePlugin.php',
+ 'OCA\\DAV\\Files\\FileSearchBackend' => $baseDir . '/../lib/Files/FileSearchBackend.php',
+ 'OCA\\DAV\\Files\\FilesHome' => $baseDir . '/../lib/Files/FilesHome.php',
+ 'OCA\\DAV\\Files\\RootCollection' => $baseDir . '/../lib/Files/RootCollection.php',
+ 'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => $baseDir . '/../lib/Files/Sharing/FilesDropPlugin.php',
+ 'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => $baseDir . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php',
+ 'OCA\\DAV\\HookManager' => $baseDir . '/../lib/HookManager.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndex' => $baseDir . '/../lib/Migration/BuildCalendarSearchIndex.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndexBackgroundJob' => $baseDir . '/../lib/Migration/BuildCalendarSearchIndexBackgroundJob.php',
+ 'OCA\\DAV\\Migration\\CalDAVRemoveEmptyValue' => $baseDir . '/../lib/Migration/CalDAVRemoveEmptyValue.php',
+ 'OCA\\DAV\\Migration\\FixBirthdayCalendarComponent' => $baseDir . '/../lib/Migration/FixBirthdayCalendarComponent.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170825134824' => $baseDir . '/../lib/Migration/Version1004Date20170825134824.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170919104507' => $baseDir . '/../lib/Migration/Version1004Date20170919104507.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170924124212' => $baseDir . '/../lib/Migration/Version1004Date20170924124212.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170926103422' => $baseDir . '/../lib/Migration/Version1004Date20170926103422.php',
+ 'OCA\\DAV\\RootCollection' => $baseDir . '/../lib/RootCollection.php',
+ 'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php',
+ 'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => $baseDir . '/../lib/SystemTag/SystemTagMappingNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagNode' => $baseDir . '/../lib/SystemTag/SystemTagNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagPlugin' => $baseDir . '/../lib/SystemTag/SystemTagPlugin.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsByIdCollection' => $baseDir . '/../lib/SystemTag/SystemTagsByIdCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectMappingCollection' => $baseDir . '/../lib/SystemTag/SystemTagsObjectMappingCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectTypeCollection' => $baseDir . '/../lib/SystemTag/SystemTagsObjectTypeCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsRelationsCollection' => $baseDir . '/../lib/SystemTag/SystemTagsRelationsCollection.php',
+ 'OCA\\DAV\\Upload\\AssemblyStream' => $baseDir . '/../lib/Upload/AssemblyStream.php',
+ 'OCA\\DAV\\Upload\\FutureFile' => $baseDir . '/../lib/Upload/FutureFile.php',
+ 'OCA\\DAV\\Upload\\RootCollection' => $baseDir . '/../lib/Upload/RootCollection.php',
+ 'OCA\\DAV\\Upload\\UploadFolder' => $baseDir . '/../lib/Upload/UploadFolder.php',
+ 'OCA\\DAV\\Upload\\UploadHome' => $baseDir . '/../lib/Upload/UploadHome.php',
+);
diff --git a/apps/dav/composer/composer/autoload_namespaces.php b/apps/dav/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/dav/composer/composer/autoload_psr4.php b/apps/dav/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..b37c184d6ef
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\DAV\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/dav/composer/composer/autoload_real.php b/apps/dav/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..cd699e0b4fd
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitDAV
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitDAV', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitDAV', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitDAV::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..412666a8aa7
--- /dev/null
+++ b/apps/dav/composer/composer/autoload_static.php
@@ -0,0 +1,171 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitDAV
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\DAV\\' => 8,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\DAV\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\DAV\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\DAV\\AppInfo\\PluginManager' => __DIR__ . '/..' . '/../lib/AppInfo/PluginManager.php',
+ 'OCA\\DAV\\Avatars\\AvatarHome' => __DIR__ . '/..' . '/../lib/Avatars/AvatarHome.php',
+ 'OCA\\DAV\\Avatars\\AvatarNode' => __DIR__ . '/..' . '/../lib/Avatars/AvatarNode.php',
+ 'OCA\\DAV\\Avatars\\RootCollection' => __DIR__ . '/..' . '/../lib/Avatars/RootCollection.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Backend' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Backend.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Base' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Base.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Provider\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Todo.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Event.php',
+ 'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Todo.php',
+ 'OCA\\DAV\\CalDAV\\BirthdayService' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayService.php',
+ 'OCA\\DAV\\CalDAV\\CalDavBackend' => __DIR__ . '/..' . '/../lib/CalDAV/CalDavBackend.php',
+ 'OCA\\DAV\\CalDAV\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Calendar.php',
+ 'OCA\\DAV\\CalDAV\\CalendarHome' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarHome.php',
+ 'OCA\\DAV\\CalDAV\\CalendarObject' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\CalendarRoot' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Plugin' => __DIR__ . '/..' . '/../lib/CalDAV/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendar' => __DIR__ . '/..' . '/../lib/CalDAV/PublicCalendar.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarObject' => __DIR__ . '/..' . '/../lib/CalDAV/PublicCalendarObject.php',
+ 'OCA\\DAV\\CalDAV\\PublicCalendarRoot' => __DIR__ . '/..' . '/../lib/CalDAV/PublicCalendarRoot.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\PublishPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Publishing/PublishPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Publishing\\Xml\\Publisher' => __DIR__ . '/..' . '/../lib/CalDAV/Publishing/Xml/Publisher.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\IMipPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Schedule/IMipPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Schedule\\Plugin' => __DIR__ . '/..' . '/../lib/CalDAV/Schedule/Plugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\SearchPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Search/SearchPlugin.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/CompFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/LimitFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/OffsetFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/ParamFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/PropFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php',
+ 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport' => __DIR__ . '/..' . '/../lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php',
+ 'OCA\\DAV\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\DAV\\CardDAV\\AddressBook' => __DIR__ . '/..' . '/../lib/CardDAV/AddressBook.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookImpl' => __DIR__ . '/..' . '/../lib/CardDAV/AddressBookImpl.php',
+ 'OCA\\DAV\\CardDAV\\AddressBookRoot' => __DIR__ . '/..' . '/../lib/CardDAV/AddressBookRoot.php',
+ 'OCA\\DAV\\CardDAV\\CardDavBackend' => __DIR__ . '/..' . '/../lib/CardDAV/CardDavBackend.php',
+ 'OCA\\DAV\\CardDAV\\ContactsManager' => __DIR__ . '/..' . '/../lib/CardDAV/ContactsManager.php',
+ 'OCA\\DAV\\CardDAV\\Converter' => __DIR__ . '/..' . '/../lib/CardDAV/Converter.php',
+ 'OCA\\DAV\\CardDAV\\ImageExportPlugin' => __DIR__ . '/..' . '/../lib/CardDAV/ImageExportPlugin.php',
+ 'OCA\\DAV\\CardDAV\\PhotoCache' => __DIR__ . '/..' . '/../lib/CardDAV/PhotoCache.php',
+ 'OCA\\DAV\\CardDAV\\Plugin' => __DIR__ . '/..' . '/../lib/CardDAV/Plugin.php',
+ 'OCA\\DAV\\CardDAV\\SyncJob' => __DIR__ . '/..' . '/../lib/CardDAV/SyncJob.php',
+ 'OCA\\DAV\\CardDAV\\SyncService' => __DIR__ . '/..' . '/../lib/CardDAV/SyncService.php',
+ 'OCA\\DAV\\CardDAV\\UserAddressBooks' => __DIR__ . '/..' . '/../lib/CardDAV/UserAddressBooks.php',
+ 'OCA\\DAV\\CardDAV\\Xml\\Groups' => __DIR__ . '/..' . '/../lib/CardDAV/Xml/Groups.php',
+ 'OCA\\DAV\\Command\\CreateAddressBook' => __DIR__ . '/..' . '/../lib/Command/CreateAddressBook.php',
+ 'OCA\\DAV\\Command\\CreateCalendar' => __DIR__ . '/..' . '/../lib/Command/CreateCalendar.php',
+ 'OCA\\DAV\\Command\\SyncBirthdayCalendar' => __DIR__ . '/..' . '/../lib/Command/SyncBirthdayCalendar.php',
+ 'OCA\\DAV\\Command\\SyncSystemAddressBook' => __DIR__ . '/..' . '/../lib/Command/SyncSystemAddressBook.php',
+ 'OCA\\DAV\\Comments\\CommentNode' => __DIR__ . '/..' . '/../lib/Comments/CommentNode.php',
+ 'OCA\\DAV\\Comments\\CommentsPlugin' => __DIR__ . '/..' . '/../lib/Comments/CommentsPlugin.php',
+ 'OCA\\DAV\\Comments\\EntityCollection' => __DIR__ . '/..' . '/../lib/Comments/EntityCollection.php',
+ 'OCA\\DAV\\Comments\\EntityTypeCollection' => __DIR__ . '/..' . '/../lib/Comments/EntityTypeCollection.php',
+ 'OCA\\DAV\\Comments\\RootCollection' => __DIR__ . '/..' . '/../lib/Comments/RootCollection.php',
+ 'OCA\\DAV\\Connector\\LegacyDAVACL' => __DIR__ . '/..' . '/../lib/Connector/LegacyDAVACL.php',
+ 'OCA\\DAV\\Connector\\PublicAuth' => __DIR__ . '/..' . '/../lib/Connector/PublicAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\AppEnabledPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AppEnabledPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Auth' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Auth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BearerAuth' => __DIR__ . '/..' . '/../lib/Connector/Sabre/BearerAuth.php',
+ 'OCA\\DAV\\Connector\\Sabre\\BlockLegacyClientPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/BlockLegacyClientPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CachingTree' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CachingTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ChecksumList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ChecksumList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CommentPropertiesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CopyEtagHeaderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CopyEtagHeaderPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\CustomPropertiesBackend' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DavAclPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/DavAclPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Directory' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Directory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\DummyGetResponsePlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/DummyGetResponsePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ExceptionLoggerPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ExceptionLoggerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\EntityTooLarge' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/EntityTooLarge.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\FileLocked' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/FileLocked.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\Forbidden' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/Forbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\InvalidPath' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/InvalidPath.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\PasswordLoginForbidden' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/PasswordLoginForbidden.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Exception\\UnsupportedMediaType' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Exception/UnsupportedMediaType.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FakeLockerPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/FakeLockerPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\File' => __DIR__ . '/..' . '/../lib/Connector/Sabre/File.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/FilesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\FilesReportPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/FilesReportPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\LockPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/LockPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\MaintenancePlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/MaintenancePlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Node' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Node.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ObjectTree' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ObjectTree.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Principal' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Principal.php',
+ 'OCA\\DAV\\Connector\\Sabre\\QuotaPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/QuotaPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\Server' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Server.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ServerFactory' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ServerFactory.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ShareTypeList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ShareTypeList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/SharesPlugin.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagsPlugin.php',
+ 'OCA\\DAV\\DAV\\CustomPropertiesBackend' => __DIR__ . '/..' . '/../lib/DAV/CustomPropertiesBackend.php',
+ 'OCA\\DAV\\DAV\\GroupPrincipalBackend' => __DIR__ . '/..' . '/../lib/DAV/GroupPrincipalBackend.php',
+ 'OCA\\DAV\\DAV\\PublicAuth' => __DIR__ . '/..' . '/../lib/DAV/PublicAuth.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Backend' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Backend.php',
+ 'OCA\\DAV\\DAV\\Sharing\\IShareable' => __DIR__ . '/..' . '/../lib/DAV/Sharing/IShareable.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Plugin' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Plugin.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\Invite' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Xml/Invite.php',
+ 'OCA\\DAV\\DAV\\Sharing\\Xml\\ShareRequest' => __DIR__ . '/..' . '/../lib/DAV/Sharing/Xml/ShareRequest.php',
+ 'OCA\\DAV\\DAV\\SystemPrincipalBackend' => __DIR__ . '/..' . '/../lib/DAV/SystemPrincipalBackend.php',
+ 'OCA\\DAV\\Files\\BrowserErrorPagePlugin' => __DIR__ . '/..' . '/../lib/Files/BrowserErrorPagePlugin.php',
+ 'OCA\\DAV\\Files\\FileSearchBackend' => __DIR__ . '/..' . '/../lib/Files/FileSearchBackend.php',
+ 'OCA\\DAV\\Files\\FilesHome' => __DIR__ . '/..' . '/../lib/Files/FilesHome.php',
+ 'OCA\\DAV\\Files\\RootCollection' => __DIR__ . '/..' . '/../lib/Files/RootCollection.php',
+ 'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/FilesDropPlugin.php',
+ 'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php',
+ 'OCA\\DAV\\HookManager' => __DIR__ . '/..' . '/../lib/HookManager.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndex' => __DIR__ . '/..' . '/../lib/Migration/BuildCalendarSearchIndex.php',
+ 'OCA\\DAV\\Migration\\BuildCalendarSearchIndexBackgroundJob' => __DIR__ . '/..' . '/../lib/Migration/BuildCalendarSearchIndexBackgroundJob.php',
+ 'OCA\\DAV\\Migration\\CalDAVRemoveEmptyValue' => __DIR__ . '/..' . '/../lib/Migration/CalDAVRemoveEmptyValue.php',
+ 'OCA\\DAV\\Migration\\FixBirthdayCalendarComponent' => __DIR__ . '/..' . '/../lib/Migration/FixBirthdayCalendarComponent.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170825134824' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170825134824.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170919104507' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170919104507.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170924124212' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170924124212.php',
+ 'OCA\\DAV\\Migration\\Version1004Date20170926103422' => __DIR__ . '/..' . '/../lib/Migration/Version1004Date20170926103422.php',
+ 'OCA\\DAV\\RootCollection' => __DIR__ . '/..' . '/../lib/RootCollection.php',
+ 'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php',
+ 'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagMappingNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagNode.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagPlugin' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagPlugin.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsByIdCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsByIdCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectMappingCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsObjectMappingCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsObjectTypeCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsObjectTypeCollection.php',
+ 'OCA\\DAV\\SystemTag\\SystemTagsRelationsCollection' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagsRelationsCollection.php',
+ 'OCA\\DAV\\Upload\\AssemblyStream' => __DIR__ . '/..' . '/../lib/Upload/AssemblyStream.php',
+ 'OCA\\DAV\\Upload\\FutureFile' => __DIR__ . '/..' . '/../lib/Upload/FutureFile.php',
+ 'OCA\\DAV\\Upload\\RootCollection' => __DIR__ . '/..' . '/../lib/Upload/RootCollection.php',
+ 'OCA\\DAV\\Upload\\UploadFolder' => __DIR__ . '/..' . '/../lib/Upload/UploadFolder.php',
+ 'OCA\\DAV\\Upload\\UploadHome' => __DIR__ . '/..' . '/../lib/Upload/UploadHome.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitDAV::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitDAV::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitDAV::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/dav/l10n/bg.js b/apps/dav/l10n/bg.js
index 3f55af78124..85bbca23def 100644
--- a/apps/dav/l10n/bg.js
+++ b/apps/dav/l10n/bg.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Календар",
"Todos" : "Задачи",
+ "Personal" : "Личен",
"{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
"You created calendar {calendar}" : "Направихте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
"A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
"Contact birthdays" : "Рождени дни на контакти",
- "Personal" : "Личен",
"Contacts" : "Контакти",
"Technical details" : "Технически детайли",
"Remote Address: %s" : "Отдалечен адрес: %s",
diff --git a/apps/dav/l10n/bg.json b/apps/dav/l10n/bg.json
index 03238418d18..cac7c6af183 100644
--- a/apps/dav/l10n/bg.json
+++ b/apps/dav/l10n/bg.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Календар",
"Todos" : "Задачи",
+ "Personal" : "Личен",
"{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
"You created calendar {calendar}" : "Направихте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
"A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
"Contact birthdays" : "Рождени дни на контакти",
- "Personal" : "Личен",
"Contacts" : "Контакти",
"Technical details" : "Технически детайли",
"Remote Address: %s" : "Отдалечен адрес: %s",
diff --git a/apps/dav/l10n/ca.js b/apps/dav/l10n/ca.js
index 1b176c5d506..d59b3d88fdd 100644
--- a/apps/dav/l10n/ca.js
+++ b/apps/dav/l10n/ca.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendari",
"Todos" : "Tots",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} ha creat el calendari {calendar}",
"You created calendar {calendar}" : "Vosté ha creat el calentari {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha esborrat el calendari {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong> esdeveniment </strong> del calendari",
"A calendar <strong>todo</strong> was modified" : "<strong>Tot</strong> un calendari va ser modificat",
"Contact birthdays" : "Aniversaris dels contactes",
- "Personal" : "Personal",
"Contacts" : "Contactes",
"Technical details" : "Detalls tècnics",
"Remote Address: %s" : "Adreça remota: %s",
diff --git a/apps/dav/l10n/ca.json b/apps/dav/l10n/ca.json
index 7c30c4050a0..04fec606daf 100644
--- a/apps/dav/l10n/ca.json
+++ b/apps/dav/l10n/ca.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendari",
"Todos" : "Tots",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} ha creat el calendari {calendar}",
"You created calendar {calendar}" : "Vosté ha creat el calentari {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha esborrat el calendari {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "S'ha modificat un <strong> esdeveniment </strong> del calendari",
"A calendar <strong>todo</strong> was modified" : "<strong>Tot</strong> un calendari va ser modificat",
"Contact birthdays" : "Aniversaris dels contactes",
- "Personal" : "Personal",
"Contacts" : "Contactes",
"Technical details" : "Detalls tècnics",
"Remote Address: %s" : "Adreça remota: %s",
diff --git a/apps/dav/l10n/cs.js b/apps/dav/l10n/cs.js
index acd0b85b03f..5c1b1a2b0f2 100644
--- a/apps/dav/l10n/cs.js
+++ b/apps/dav/l10n/cs.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
+ "Personal" : "Osobní",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořil(a",
"{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
"Contact birthdays" : "Narozeniny kontaktů",
- "Personal" : "Osobní",
"Contacts" : "Kontakty",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
diff --git a/apps/dav/l10n/cs.json b/apps/dav/l10n/cs.json
index c1a25b3401e..0b21caa829b 100644
--- a/apps/dav/l10n/cs.json
+++ b/apps/dav/l10n/cs.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
+ "Personal" : "Osobní",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořil(a",
"{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
"Contact birthdays" : "Narozeniny kontaktů",
- "Personal" : "Osobní",
"Contacts" : "Kontakty",
"Technical details" : "Technické detaily",
"Remote Address: %s" : "Vzdálená adresa: %s",
diff --git a/apps/dav/l10n/da.js b/apps/dav/l10n/da.js
index dd7328cb581..b26fcb51510 100644
--- a/apps/dav/l10n/da.js
+++ b/apps/dav/l10n/da.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Opgaver",
+ "Personal" : "Personligt",
"{actor} created calendar {calendar}" : "{actor} oprettede kalenderen {calendar}",
"You created calendar {calendar}" : "Du oprettede kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} sletede kalenderen {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "En kalender <strong>begivenhed</strong> er blevet ændret",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>opgave</strong> blev ændret",
"Contact birthdays" : "Kontakt fødselsdag",
- "Personal" : "Personligt",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Fjernadresse: %s",
diff --git a/apps/dav/l10n/da.json b/apps/dav/l10n/da.json
index 3bbe78a520c..be5aa72d05b 100644
--- a/apps/dav/l10n/da.json
+++ b/apps/dav/l10n/da.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Opgaver",
+ "Personal" : "Personligt",
"{actor} created calendar {calendar}" : "{actor} oprettede kalenderen {calendar}",
"You created calendar {calendar}" : "Du oprettede kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} sletede kalenderen {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "En kalender <strong>begivenhed</strong> er blevet ændret",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>opgave</strong> blev ændret",
"Contact birthdays" : "Kontakt fødselsdag",
- "Personal" : "Personligt",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Fjernadresse: %s",
diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js
index 1a2f3b4b1bb..30f3ae53e02 100644
--- a/apps/dav/l10n/de.js
+++ b/apps/dav/l10n/de.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json
index 64a6a7d48c6..401cab208d3 100644
--- a/apps/dav/l10n/de.json
+++ b/apps/dav/l10n/de.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js
index 8e8e29a2964..43b218dacc5 100644
--- a/apps/dav/l10n/de_DE.js
+++ b/apps/dav/l10n/de_DE.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Sie haben den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json
index 7c777e101ac..9de0db6d70b 100644
--- a/apps/dav/l10n/de_DE.json
+++ b/apps/dav/l10n/de_DE.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Aufgaben",
+ "Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Sie haben den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
- "Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
diff --git a/apps/dav/l10n/el.js b/apps/dav/l10n/el.js
index 8565fc2ce39..f64c83d2aaf 100644
--- a/apps/dav/l10n/el.js
+++ b/apps/dav/l10n/el.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Ημερολόγιο",
"Todos" : "Εργασίες προς εκτέλεση",
+ "Personal" : "Προσωπικά",
"{actor} created calendar {calendar}" : "{actor} δημιουργήθηκε το ημερολόγιο {calendar}",
"You created calendar {calendar}" : "Δημιουργήσατε ημερολόγιο {ημερολόγιο}",
"{actor} deleted calendar {calendar}" : "{actor} διέγραψε το ημερολόγιο {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Τροποποιήθηκε ένα <strong>γεγονός</strong> του ημερολογίου",
"A calendar <strong>todo</strong> was modified" : "Ενός ημερολογίου η <strong>εκκρεμότητα</strong> τροποποιήθηκε",
"Contact birthdays" : "Γενέθλια επαφών",
- "Personal" : "Προσωπικά",
"Contacts" : "Επαφές",
"Technical details" : "Τεχνικές λεπτομέρειες",
"Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s",
diff --git a/apps/dav/l10n/el.json b/apps/dav/l10n/el.json
index c0a3f5369dc..9f7a1ab9268 100644
--- a/apps/dav/l10n/el.json
+++ b/apps/dav/l10n/el.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Ημερολόγιο",
"Todos" : "Εργασίες προς εκτέλεση",
+ "Personal" : "Προσωπικά",
"{actor} created calendar {calendar}" : "{actor} δημιουργήθηκε το ημερολόγιο {calendar}",
"You created calendar {calendar}" : "Δημιουργήσατε ημερολόγιο {ημερολόγιο}",
"{actor} deleted calendar {calendar}" : "{actor} διέγραψε το ημερολόγιο {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Τροποποιήθηκε ένα <strong>γεγονός</strong> του ημερολογίου",
"A calendar <strong>todo</strong> was modified" : "Ενός ημερολογίου η <strong>εκκρεμότητα</strong> τροποποιήθηκε",
"Contact birthdays" : "Γενέθλια επαφών",
- "Personal" : "Προσωπικά",
"Contacts" : "Επαφές",
"Technical details" : "Τεχνικές λεπτομέρειες",
"Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s",
diff --git a/apps/dav/l10n/en_GB.js b/apps/dav/l10n/en_GB.js
index 6dd47179e37..463fe47ea69 100644
--- a/apps/dav/l10n/en_GB.js
+++ b/apps/dav/l10n/en_GB.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendar",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} created calendar {calendar}",
"You created calendar {calendar}" : "You created calendar {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} deleted calendar {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "A calendar <strong>event</strong> was modified",
"A calendar <strong>todo</strong> was modified" : "A calendar <strong>todo</strong> was modified",
"Contact birthdays" : "Contact birthdays",
- "Personal" : "Personal",
"Contacts" : "Contacts",
"Technical details" : "Technical details",
"Remote Address: %s" : "Remote Address: %s",
- "Request ID: %s" : "Request ID: %s"
+ "Request ID: %s" : "Request ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "Send invitations to attendees" : "Send invitations to attendees",
+ "Please make sure to properly set up the email settings above." : "Please make sure to properly set up the email settings above."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/en_GB.json b/apps/dav/l10n/en_GB.json
index fb240965003..b5319c01a49 100644
--- a/apps/dav/l10n/en_GB.json
+++ b/apps/dav/l10n/en_GB.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendar",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} created calendar {calendar}",
"You created calendar {calendar}" : "You created calendar {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} deleted calendar {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "A calendar <strong>event</strong> was modified",
"A calendar <strong>todo</strong> was modified" : "A calendar <strong>todo</strong> was modified",
"Contact birthdays" : "Contact birthdays",
- "Personal" : "Personal",
"Contacts" : "Contacts",
"Technical details" : "Technical details",
"Remote Address: %s" : "Remote Address: %s",
- "Request ID: %s" : "Request ID: %s"
+ "Request ID: %s" : "Request ID: %s",
+ "CalDAV server" : "CalDAV server",
+ "Send invitations to attendees" : "Send invitations to attendees",
+ "Please make sure to properly set up the email settings above." : "Please make sure to properly set up the email settings above."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js
index b518dfd0dfe..75b5ccc8aa9 100644
--- a/apps/dav/l10n/es.js
+++ b/apps/dav/l10n/es.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eliminó el calendario {calendar}",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario fue modificado.",
"A calendar <strong>todo</strong> was modified" : "Una <strong>lista de tareas</strong> fue modificada",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
- "Request ID: %s" : "ID de la solicitud: %s"
+ "Request ID: %s" : "ID de la solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor, asegúrate de que las configuraciones de correo de arriba son correctas"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json
index 0503e24f25b..72c0aceef5e 100644
--- a/apps/dav/l10n/es.json
+++ b/apps/dav/l10n/es.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Todos",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eliminó el calendario {calendar}",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario fue modificado.",
"A calendar <strong>todo</strong> was modified" : "Una <strong>lista de tareas</strong> fue modificada",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
- "Request ID: %s" : "ID de la solicitud: %s"
+ "Request ID: %s" : "ID de la solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor, asegúrate de que las configuraciones de correo de arriba son correctas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/es_AR.js b/apps/dav/l10n/es_AR.js
index d8753d65d34..7fac0070c8a 100644
--- a/apps/dav/l10n/es_AR.js
+++ b/apps/dav/l10n/es_AR.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
"A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
diff --git a/apps/dav/l10n/es_AR.json b/apps/dav/l10n/es_AR.json
index 1eb8d35975c..542d1536fc7 100644
--- a/apps/dav/l10n/es_AR.json
+++ b/apps/dav/l10n/es_AR.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
"A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
diff --git a/apps/dav/l10n/es_CO.js b/apps/dav/l10n/es_CO.js
index 44fac362a38..433949bf30f 100644
--- a/apps/dav/l10n/es_CO.js
+++ b/apps/dav/l10n/es_CO.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Creaste el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -40,12 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
"A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
"Request ID: %s" : "ID de solicitud: %s",
"CalDAV server" : "Servidor CalDAV",
- "Send invitations to attendees" : "Enviar invitaciones a los asistentes"
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es_CO.json b/apps/dav/l10n/es_CO.json
index 5a7b92dca53..ea72915ea47 100644
--- a/apps/dav/l10n/es_CO.json
+++ b/apps/dav/l10n/es_CO.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Creaste el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -38,12 +39,12 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
"A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
"Request ID: %s" : "ID de solicitud: %s",
"CalDAV server" : "Servidor CalDAV",
- "Send invitations to attendees" : "Enviar invitaciones a los asistentes"
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/es_CR.js b/apps/dav/l10n/es_CR.js
new file mode 100644
index 00000000000..433949bf30f
--- /dev/null
+++ b/apps/dav/l10n/es_CR.js
@@ -0,0 +1,52 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Calendario",
+ "Todos" : "Pendientes",
+ "Personal" : "Personal",
+ "{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
+ "You created calendar {calendar}" : "Creaste el calendario {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
+ "You deleted calendar {calendar}" : "Borraste el calendario {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
+ "You updated calendar {calendar}" : "Actualizaste el calendario {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} contigo",
+ "You shared calendar {calendar} with {user}" : "Compartiste el calendario {calendar} con {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} contigo",
+ "You unshared calendar {calendar} from {user}" : "Has dejado de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
+ "You shared calendar {calendar} with group {group}" : "Compartiste el calendario {calendar} con el grupo {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}",
+ "You unshared calendar {calendar} from group {group}" : "Dejaste de compartir el calendario {calendar} con el grupo {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
+ "You created event {event} in calendar {calendar}" : "Creaste el evento {event} en el calendario {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} borró el eventó {event} del calendario {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Borraste el evento {event} del calendario {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Actualizaste el evento {event} en el calendario {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} creó el pendiente {todo} en la lista {calendar}",
+ "You created todo {todo} in list {calendar}" : "Creaste el pendiente {todo} en la lista {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} borró el pendiente {todo} de la lista {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Borraste el pendiente {todo} de la lista {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} actualizó el pendiente {todo} de la lista {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Actualizaste el pendiente {todo} de la lista {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} resolvió el pendiente {todo} de la lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Resolviste el pendiente {todo} de la lista {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} reabrió el pendiente {todo} de la lista{calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Reabriste el pendiente {todo} de la lista {calendar}",
+ "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado",
+ "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
+ "A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
+ "Contact birthdays" : "Cumpleaños del contacto",
+ "Contacts" : "Contactos",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es_CR.json b/apps/dav/l10n/es_CR.json
new file mode 100644
index 00000000000..ea72915ea47
--- /dev/null
+++ b/apps/dav/l10n/es_CR.json
@@ -0,0 +1,50 @@
+{ "translations": {
+ "Calendar" : "Calendario",
+ "Todos" : "Pendientes",
+ "Personal" : "Personal",
+ "{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
+ "You created calendar {calendar}" : "Creaste el calendario {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
+ "You deleted calendar {calendar}" : "Borraste el calendario {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
+ "You updated calendar {calendar}" : "Actualizaste el calendario {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} contigo",
+ "You shared calendar {calendar} with {user}" : "Compartiste el calendario {calendar} con {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} contigo",
+ "You unshared calendar {calendar} from {user}" : "Has dejado de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
+ "You shared calendar {calendar} with group {group}" : "Compartiste el calendario {calendar} con el grupo {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}",
+ "You unshared calendar {calendar} from group {group}" : "Dejaste de compartir el calendario {calendar} con el grupo {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
+ "You created event {event} in calendar {calendar}" : "Creaste el evento {event} en el calendario {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} borró el eventó {event} del calendario {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Borraste el evento {event} del calendario {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Actualizaste el evento {event} en el calendario {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} creó el pendiente {todo} en la lista {calendar}",
+ "You created todo {todo} in list {calendar}" : "Creaste el pendiente {todo} en la lista {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} borró el pendiente {todo} de la lista {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Borraste el pendiente {todo} de la lista {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} actualizó el pendiente {todo} de la lista {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Actualizaste el pendiente {todo} de la lista {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} resolvió el pendiente {todo} de la lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Resolviste el pendiente {todo} de la lista {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} reabrió el pendiente {todo} de la lista{calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Reabriste el pendiente {todo} de la lista {calendar}",
+ "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado",
+ "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
+ "A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
+ "Contact birthdays" : "Cumpleaños del contacto",
+ "Contacts" : "Contactos",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/es_DO.js b/apps/dav/l10n/es_DO.js
new file mode 100644
index 00000000000..433949bf30f
--- /dev/null
+++ b/apps/dav/l10n/es_DO.js
@@ -0,0 +1,52 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Calendario",
+ "Todos" : "Pendientes",
+ "Personal" : "Personal",
+ "{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
+ "You created calendar {calendar}" : "Creaste el calendario {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
+ "You deleted calendar {calendar}" : "Borraste el calendario {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
+ "You updated calendar {calendar}" : "Actualizaste el calendario {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} contigo",
+ "You shared calendar {calendar} with {user}" : "Compartiste el calendario {calendar} con {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} contigo",
+ "You unshared calendar {calendar} from {user}" : "Has dejado de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
+ "You shared calendar {calendar} with group {group}" : "Compartiste el calendario {calendar} con el grupo {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}",
+ "You unshared calendar {calendar} from group {group}" : "Dejaste de compartir el calendario {calendar} con el grupo {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
+ "You created event {event} in calendar {calendar}" : "Creaste el evento {event} en el calendario {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} borró el eventó {event} del calendario {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Borraste el evento {event} del calendario {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Actualizaste el evento {event} en el calendario {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} creó el pendiente {todo} en la lista {calendar}",
+ "You created todo {todo} in list {calendar}" : "Creaste el pendiente {todo} en la lista {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} borró el pendiente {todo} de la lista {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Borraste el pendiente {todo} de la lista {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} actualizó el pendiente {todo} de la lista {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Actualizaste el pendiente {todo} de la lista {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} resolvió el pendiente {todo} de la lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Resolviste el pendiente {todo} de la lista {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} reabrió el pendiente {todo} de la lista{calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Reabriste el pendiente {todo} de la lista {calendar}",
+ "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado",
+ "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
+ "A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
+ "Contact birthdays" : "Cumpleaños del contacto",
+ "Contacts" : "Contactos",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es_DO.json b/apps/dav/l10n/es_DO.json
new file mode 100644
index 00000000000..ea72915ea47
--- /dev/null
+++ b/apps/dav/l10n/es_DO.json
@@ -0,0 +1,50 @@
+{ "translations": {
+ "Calendar" : "Calendario",
+ "Todos" : "Pendientes",
+ "Personal" : "Personal",
+ "{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
+ "You created calendar {calendar}" : "Creaste el calendario {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
+ "You deleted calendar {calendar}" : "Borraste el calendario {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
+ "You updated calendar {calendar}" : "Actualizaste el calendario {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} contigo",
+ "You shared calendar {calendar} with {user}" : "Compartiste el calendario {calendar} con {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} contigo",
+ "You unshared calendar {calendar} from {user}" : "Has dejado de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
+ "You shared calendar {calendar} with group {group}" : "Compartiste el calendario {calendar} con el grupo {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} compartió el calendario {calendar} con el grupo {group}",
+ "You unshared calendar {calendar} from group {group}" : "Dejaste de compartir el calendario {calendar} con el grupo {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
+ "You created event {event} in calendar {calendar}" : "Creaste el evento {event} en el calendario {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} borró el eventó {event} del calendario {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Borraste el evento {event} del calendario {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Actualizaste el evento {event} en el calendario {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} creó el pendiente {todo} en la lista {calendar}",
+ "You created todo {todo} in list {calendar}" : "Creaste el pendiente {todo} en la lista {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} borró el pendiente {todo} de la lista {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Borraste el pendiente {todo} de la lista {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} actualizó el pendiente {todo} de la lista {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Actualizaste el pendiente {todo} de la lista {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} resolvió el pendiente {todo} de la lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Resolviste el pendiente {todo} de la lista {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} reabrió el pendiente {todo} de la lista{calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Reabriste el pendiente {todo} de la lista {calendar}",
+ "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado",
+ "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
+ "A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
+ "Contact birthdays" : "Cumpleaños del contacto",
+ "Contacts" : "Contactos",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "CalDAV server" : "Servidor CalDAV",
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/es_MX.js b/apps/dav/l10n/es_MX.js
index 44fac362a38..433949bf30f 100644
--- a/apps/dav/l10n/es_MX.js
+++ b/apps/dav/l10n/es_MX.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Creaste el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -40,12 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
"A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
"Request ID: %s" : "ID de solicitud: %s",
"CalDAV server" : "Servidor CalDAV",
- "Send invitations to attendees" : "Enviar invitaciones a los asistentes"
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/es_MX.json b/apps/dav/l10n/es_MX.json
index 5a7b92dca53..ea72915ea47 100644
--- a/apps/dav/l10n/es_MX.json
+++ b/apps/dav/l10n/es_MX.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Pendientes",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Creaste el calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} borró el calendario {calendar}",
@@ -38,12 +39,12 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> de un calendario fue modificado",
"A calendar <strong>todo</strong> was modified" : "Un <strong>pendiente</strong> de un calendario fue modificado",
"Contact birthdays" : "Cumpleaños del contacto",
- "Personal" : "Personal",
"Contacts" : "Contactos",
"Technical details" : "Detalles técnicos",
"Remote Address: %s" : "Dirección remota: %s",
"Request ID: %s" : "ID de solicitud: %s",
"CalDAV server" : "Servidor CalDAV",
- "Send invitations to attendees" : "Enviar invitaciones a los asistentes"
+ "Send invitations to attendees" : "Enviar invitaciones a los asistentes",
+ "Please make sure to properly set up the email settings above." : "Por favor asegurarte de establecer correctamente las configuraciones de correo anteriores. "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/dav/l10n/fi.js b/apps/dav/l10n/fi.js
index 47a3df1aa50..51e42b5d72e 100644
--- a/apps/dav/l10n/fi.js
+++ b/apps/dav/l10n/fi.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalenteri",
"Todos" : "Tehtävät",
+ "Personal" : "Henkilökohtainen",
"{actor} created calendar {calendar}" : "{actor} loi kalenterin {calendar}",
"You created calendar {calendar}" : "Loit kalenterin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} poisti kalenterin {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Kalenterin <strong>tapahtumaa</strong> on muokattu",
"A calendar <strong>todo</strong> was modified" : "Kalenterin <strong>tehtävää</strong> on muokattu",
"Contact birthdays" : "Yhteystietojen syntymäpäivät",
- "Personal" : "Henkilökohtainen",
"Contacts" : "Yhteystiedot",
"Technical details" : "Tekniset yksityiskohdat",
"Remote Address: %s" : "Etäosoite: %s",
diff --git a/apps/dav/l10n/fi.json b/apps/dav/l10n/fi.json
index 53c7aa72903..6b3726a242e 100644
--- a/apps/dav/l10n/fi.json
+++ b/apps/dav/l10n/fi.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalenteri",
"Todos" : "Tehtävät",
+ "Personal" : "Henkilökohtainen",
"{actor} created calendar {calendar}" : "{actor} loi kalenterin {calendar}",
"You created calendar {calendar}" : "Loit kalenterin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} poisti kalenterin {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Kalenterin <strong>tapahtumaa</strong> on muokattu",
"A calendar <strong>todo</strong> was modified" : "Kalenterin <strong>tehtävää</strong> on muokattu",
"Contact birthdays" : "Yhteystietojen syntymäpäivät",
- "Personal" : "Henkilökohtainen",
"Contacts" : "Yhteystiedot",
"Technical details" : "Tekniset yksityiskohdat",
"Remote Address: %s" : "Etäosoite: %s",
diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js
index 5ee864e24de..92ab671cd16 100644
--- a/apps/dav/l10n/fr.js
+++ b/apps/dav/l10n/fr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Agenda",
"Todos" : "Tâches",
+ "Personal" : "Personnel",
"{actor} created calendar {calendar}" : "{actor} a créé l'agenda {calendar}",
"You created calendar {calendar}" : "Vous avez créé l'agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a supprimé l'agenda {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>événement</strong> de l'agenda a été modifié",
"A calendar <strong>todo</strong> was modified" : "Une <strong>liste de tâches</strong> de l'agenda a été modifiée",
"Contact birthdays" : "Anniversaires des contacts",
- "Personal" : "Personnel",
"Contacts" : "Contacts",
"Technical details" : "Détails techniques",
"Remote Address: %s" : "Adresse distante : %s",
diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json
index 31b57ed80b7..65eba3c9eae 100644
--- a/apps/dav/l10n/fr.json
+++ b/apps/dav/l10n/fr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Agenda",
"Todos" : "Tâches",
+ "Personal" : "Personnel",
"{actor} created calendar {calendar}" : "{actor} a créé l'agenda {calendar}",
"You created calendar {calendar}" : "Vous avez créé l'agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a supprimé l'agenda {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>événement</strong> de l'agenda a été modifié",
"A calendar <strong>todo</strong> was modified" : "Une <strong>liste de tâches</strong> de l'agenda a été modifiée",
"Contact birthdays" : "Anniversaires des contacts",
- "Personal" : "Personnel",
"Contacts" : "Contacts",
"Technical details" : "Détails techniques",
"Remote Address: %s" : "Adresse distante : %s",
diff --git a/apps/dav/l10n/hu.js b/apps/dav/l10n/hu.js
index 580acd8de08..e1d8a950d02 100644
--- a/apps/dav/l10n/hu.js
+++ b/apps/dav/l10n/hu.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Naptár",
"Todos" : "Teendők",
+ "Personal" : "Személyes",
"{actor} created calendar {calendar}" : "{actor} létrehozta a naptárt: {calendar}",
"You created calendar {calendar}" : "Létrehoztad a naptárt: {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} törölte a naptárt: {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Egy naptár <strong>esemény</strong> megváltozott",
"A calendar <strong>todo</strong> was modified" : "Egy naptár <strong>teendő</strong> megváltozott",
"Contact birthdays" : "Születésnapok",
- "Personal" : "Személyes",
"Contacts" : "Névjegyek",
"Technical details" : "Technikai adatok",
"Remote Address: %s" : "Távoli cím: %s",
diff --git a/apps/dav/l10n/hu.json b/apps/dav/l10n/hu.json
index b5ffec493ef..f1fd00091dd 100644
--- a/apps/dav/l10n/hu.json
+++ b/apps/dav/l10n/hu.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Naptár",
"Todos" : "Teendők",
+ "Personal" : "Személyes",
"{actor} created calendar {calendar}" : "{actor} létrehozta a naptárt: {calendar}",
"You created calendar {calendar}" : "Létrehoztad a naptárt: {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} törölte a naptárt: {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Egy naptár <strong>esemény</strong> megváltozott",
"A calendar <strong>todo</strong> was modified" : "Egy naptár <strong>teendő</strong> megváltozott",
"Contact birthdays" : "Születésnapok",
- "Personal" : "Személyes",
"Contacts" : "Névjegyek",
"Technical details" : "Technikai adatok",
"Remote Address: %s" : "Távoli cím: %s",
diff --git a/apps/dav/l10n/is.js b/apps/dav/l10n/is.js
index 90a17107af9..f333a74f7a6 100644
--- a/apps/dav/l10n/is.js
+++ b/apps/dav/l10n/is.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Dagatal",
"Todos" : "Verkþættir",
+ "Personal" : "Einka",
"{actor} created calendar {calendar}" : "{actor} bjó til dagatalið {calendar}",
"You created calendar {calendar}" : "Þú bjóst til dagatalið {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eyddi dagatalinu {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Atburði</strong> dagatals var breytt",
"A calendar <strong>todo</strong> was modified" : "<strong>Verkefnalista</strong> dagatals var breytt",
"Contact birthdays" : "Afmælisdagar tengiliðar",
- "Personal" : "Einka",
"Contacts" : "Tengiliðir",
"Technical details" : "Tæknilegar upplýsingar",
"Remote Address: %s" : "Fjartengt vistfang: %s",
diff --git a/apps/dav/l10n/is.json b/apps/dav/l10n/is.json
index ebdeeea5541..13763d56f63 100644
--- a/apps/dav/l10n/is.json
+++ b/apps/dav/l10n/is.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Dagatal",
"Todos" : "Verkþættir",
+ "Personal" : "Einka",
"{actor} created calendar {calendar}" : "{actor} bjó til dagatalið {calendar}",
"You created calendar {calendar}" : "Þú bjóst til dagatalið {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} eyddi dagatalinu {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "<strong>Atburði</strong> dagatals var breytt",
"A calendar <strong>todo</strong> was modified" : "<strong>Verkefnalista</strong> dagatals var breytt",
"Contact birthdays" : "Afmælisdagar tengiliðar",
- "Personal" : "Einka",
"Contacts" : "Tengiliðir",
"Technical details" : "Tæknilegar upplýsingar",
"Remote Address: %s" : "Fjartengt vistfang: %s",
diff --git a/apps/dav/l10n/it.js b/apps/dav/l10n/it.js
index 4994257fa77..ae8ea0a1f50 100644
--- a/apps/dav/l10n/it.js
+++ b/apps/dav/l10n/it.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendario",
"Todos" : "Cose da fare",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{actor} ha creato il calendario {calendar}",
"You created calendar {calendar}" : "Hai creato il calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha eliminato il calendario {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario è stato modificato",
"A calendar <strong>todo</strong> was modified" : "Una <strong>cosa da fare</strong> del calendario è stata modificata",
"Contact birthdays" : "Date di nascita dei contatti",
- "Personal" : "Personale",
"Contacts" : "Contatti",
"Technical details" : "Dettagli tecnici",
"Remote Address: %s" : "Indirizzo remoto: %s",
diff --git a/apps/dav/l10n/it.json b/apps/dav/l10n/it.json
index 74afb2d0827..600ace4f2e4 100644
--- a/apps/dav/l10n/it.json
+++ b/apps/dav/l10n/it.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendario",
"Todos" : "Cose da fare",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{actor} ha creato il calendario {calendar}",
"You created calendar {calendar}" : "Hai creato il calendario {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ha eliminato il calendario {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario è stato modificato",
"A calendar <strong>todo</strong> was modified" : "Una <strong>cosa da fare</strong> del calendario è stata modificata",
"Contact birthdays" : "Date di nascita dei contatti",
- "Personal" : "Personale",
"Contacts" : "Contatti",
"Technical details" : "Dettagli tecnici",
"Remote Address: %s" : "Indirizzo remoto: %s",
diff --git a/apps/dav/l10n/ko.js b/apps/dav/l10n/ko.js
index af429509986..81a01556fbf 100644
--- a/apps/dav/l10n/ko.js
+++ b/apps/dav/l10n/ko.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "달력",
"Todos" : "할 일",
+ "Personal" : "개인",
"{actor} created calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 생성함",
"You created calendar {calendar}" : "달력 {calendar}을(를) 생성함",
"{actor} deleted calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 삭제함",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "달력 <strong>행사</strong>가 수정됨",
"A calendar <strong>todo</strong> was modified" : "달력의 <strong>할 일</strong>이 수정됨",
"Contact birthdays" : "연락처에 등록된 생일",
- "Personal" : "개인",
"Contacts" : "연락처",
"Technical details" : "기술 정보",
"Remote Address: %s" : "원격 주소: %s",
diff --git a/apps/dav/l10n/ko.json b/apps/dav/l10n/ko.json
index 7731c7140ae..e397a73b4b3 100644
--- a/apps/dav/l10n/ko.json
+++ b/apps/dav/l10n/ko.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "달력",
"Todos" : "할 일",
+ "Personal" : "개인",
"{actor} created calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 생성함",
"You created calendar {calendar}" : "달력 {calendar}을(를) 생성함",
"{actor} deleted calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 삭제함",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "달력 <strong>행사</strong>가 수정됨",
"A calendar <strong>todo</strong> was modified" : "달력의 <strong>할 일</strong>이 수정됨",
"Contact birthdays" : "연락처에 등록된 생일",
- "Personal" : "개인",
"Contacts" : "연락처",
"Technical details" : "기술 정보",
"Remote Address: %s" : "원격 주소: %s",
diff --git a/apps/dav/l10n/lt_LT.js b/apps/dav/l10n/lt_LT.js
index 7fc97309154..ec20bcf7bc8 100644
--- a/apps/dav/l10n/lt_LT.js
+++ b/apps/dav/l10n/lt_LT.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendorius",
"Todos" : "Užduotys",
+ "Personal" : "Asmeniniai",
"{actor} created calendar {calendar}" : "{actor} sukūrė kalendorių {calendar}",
"You created calendar {calendar}" : "Jūs sukūrėte kalendorių {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ištrynė kalendorių {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Kalendoriaus <strong>įvykis</strong> buvo pakeistas",
"A calendar <strong>todo</strong> was modified" : "Kalendoriaus <strong>užduotis</strong> buvo pakeista",
"Contact birthdays" : "Kontaktų gimtadieniai",
- "Personal" : "Asmeniniai",
"Contacts" : "Kontaktai",
"Technical details" : "Techninė informacija",
"Remote Address: %s" : "Nuotolinis adresas: %s",
diff --git a/apps/dav/l10n/lt_LT.json b/apps/dav/l10n/lt_LT.json
index e328eef4362..c0a8e43c7b8 100644
--- a/apps/dav/l10n/lt_LT.json
+++ b/apps/dav/l10n/lt_LT.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendorius",
"Todos" : "Užduotys",
+ "Personal" : "Asmeniniai",
"{actor} created calendar {calendar}" : "{actor} sukūrė kalendorių {calendar}",
"You created calendar {calendar}" : "Jūs sukūrėte kalendorių {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} ištrynė kalendorių {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Kalendoriaus <strong>įvykis</strong> buvo pakeistas",
"A calendar <strong>todo</strong> was modified" : "Kalendoriaus <strong>užduotis</strong> buvo pakeista",
"Contact birthdays" : "Kontaktų gimtadieniai",
- "Personal" : "Asmeniniai",
"Contacts" : "Kontaktai",
"Technical details" : "Techninė informacija",
"Remote Address: %s" : "Nuotolinis adresas: %s",
diff --git a/apps/dav/l10n/nb.js b/apps/dav/l10n/nb.js
index e1985b743b1..4a207c3cd57 100644
--- a/apps/dav/l10n/nb.js
+++ b/apps/dav/l10n/nb.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Gjøremål",
+ "Personal" : "Personlig",
"{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
"You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
"A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
- "Personal" : "Personlig",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Ekstern adresse: %s",
diff --git a/apps/dav/l10n/nb.json b/apps/dav/l10n/nb.json
index cce442b7655..80ddcab2b58 100644
--- a/apps/dav/l10n/nb.json
+++ b/apps/dav/l10n/nb.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Gjøremål",
+ "Personal" : "Personlig",
"{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
"You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
"A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
- "Personal" : "Personlig",
"Contacts" : "Kontakter",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Ekstern adresse: %s",
diff --git a/apps/dav/l10n/nl.js b/apps/dav/l10n/nl.js
index 45de930e196..094e621c926 100644
--- a/apps/dav/l10n/nl.js
+++ b/apps/dav/l10n/nl.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Te doen",
+ "Personal" : "Persoonlijk",
"{actor} created calendar {calendar}" : "{actor} creëerde agenda {calendar}",
"You created calendar {calendar}" : "Jij creëerde agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} verwijderde agenda {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Een agenda <strong>gebeurtenis</strong> is aangepast",
"A calendar <strong>todo</strong> was modified" : "Een agenda <strong>Te doen</strong> was aangepast",
"Contact birthdays" : "Verjaardagen",
- "Personal" : "Persoonlijk",
"Contacts" : "Contactpersonen",
"Technical details" : "Technische details",
"Remote Address: %s" : "Extern adres: %s",
diff --git a/apps/dav/l10n/nl.json b/apps/dav/l10n/nl.json
index 4935eefff7d..f38a938cd2d 100644
--- a/apps/dav/l10n/nl.json
+++ b/apps/dav/l10n/nl.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Te doen",
+ "Personal" : "Persoonlijk",
"{actor} created calendar {calendar}" : "{actor} creëerde agenda {calendar}",
"You created calendar {calendar}" : "Jij creëerde agenda {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} verwijderde agenda {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Een agenda <strong>gebeurtenis</strong> is aangepast",
"A calendar <strong>todo</strong> was modified" : "Een agenda <strong>Te doen</strong> was aangepast",
"Contact birthdays" : "Verjaardagen",
- "Personal" : "Persoonlijk",
"Contacts" : "Contactpersonen",
"Technical details" : "Technische details",
"Remote Address: %s" : "Extern adres: %s",
diff --git a/apps/dav/l10n/pl.js b/apps/dav/l10n/pl.js
index d57d8a1b3f1..e371260fb5f 100644
--- a/apps/dav/l10n/pl.js
+++ b/apps/dav/l10n/pl.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendarz",
"Todos" : "Zadania",
+ "Personal" : "Osobiste",
"{actor} created calendar {calendar}" : "{actor} utworzył/-a kalendarz {calendar}",
"You created calendar {calendar}" : "Utworzyłeś/-aś kalendarz {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} usunął/-ęła kalendarz {calendar} .",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Zdarzenie</strong> kalendarza zostało zmodyfikowane",
"A calendar <strong>todo</strong> was modified" : "Kalendarz <strong>zadań</strong> został zmieniony",
"Contact birthdays" : "Urodziny kontaktu",
- "Personal" : "Osobiste",
"Contacts" : "Kontakty",
"Technical details" : "Szczegóły techniczne",
"Remote Address: %s" : "Adres zdalny: %s",
diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json
index dc4b7a5a3ac..9d707baedd2 100644
--- a/apps/dav/l10n/pl.json
+++ b/apps/dav/l10n/pl.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendarz",
"Todos" : "Zadania",
+ "Personal" : "Osobiste",
"{actor} created calendar {calendar}" : "{actor} utworzył/-a kalendarz {calendar}",
"You created calendar {calendar}" : "Utworzyłeś/-aś kalendarz {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} usunął/-ęła kalendarz {calendar} .",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "<strong>Zdarzenie</strong> kalendarza zostało zmodyfikowane",
"A calendar <strong>todo</strong> was modified" : "Kalendarz <strong>zadań</strong> został zmieniony",
"Contact birthdays" : "Urodziny kontaktu",
- "Personal" : "Osobiste",
"Contacts" : "Kontakty",
"Technical details" : "Szczegóły techniczne",
"Remote Address: %s" : "Adres zdalny: %s",
diff --git a/apps/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js
index 20983e70721..6d2745c12d5 100644
--- a/apps/dav/l10n/pt_BR.js
+++ b/apps/dav/l10n/pt_BR.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendário",
"Todos" : "Tarefas",
+ "Personal" : "Pessoal",
"{actor} created calendar {calendar}" : "{actor} criou o calendário {calendar}",
"You created calendar {calendar}" : "Você criou o calendário {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} excluiu o calendário {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Um <strong>evento</strong> do calendário foi modificado",
"A calendar <strong>todo</strong> was modified" : "Uma <strong>tarefa</strong> do calendário foi modificada",
"Contact birthdays" : "Aniversário dos contatos",
- "Personal" : "Pessoal",
"Contacts" : "Contatos",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço remoto: %s",
diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json
index ff064fee47c..c3d954c7df3 100644
--- a/apps/dav/l10n/pt_BR.json
+++ b/apps/dav/l10n/pt_BR.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendário",
"Todos" : "Tarefas",
+ "Personal" : "Pessoal",
"{actor} created calendar {calendar}" : "{actor} criou o calendário {calendar}",
"You created calendar {calendar}" : "Você criou o calendário {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} excluiu o calendário {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Um <strong>evento</strong> do calendário foi modificado",
"A calendar <strong>todo</strong> was modified" : "Uma <strong>tarefa</strong> do calendário foi modificada",
"Contact birthdays" : "Aniversário dos contatos",
- "Personal" : "Pessoal",
"Contacts" : "Contatos",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço remoto: %s",
diff --git a/apps/dav/l10n/ro.js b/apps/dav/l10n/ro.js
index 9f3f2fbf72f..4c506608244 100644
--- a/apps/dav/l10n/ro.js
+++ b/apps/dav/l10n/ro.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Calendar",
"Todos" : "De făcut",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} a creat calendarul {calendar}",
"You created calendar {calendar}" : "Ai creat calendarul {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a șters calendarul {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Un <strong>eveniment</strong> din calendar a fost modificat",
"A calendar <strong>todo</strong> was modified" : "O <strong>listă</strong> din calendar a fost modificată",
"Contact birthdays" : "Zile de naștere ale persoanelor de contact",
- "Personal" : "Personal",
"Contacts" : "Persoane de contact",
"Technical details" : "Detalii tehnice",
"Remote Address: %s" : "Adresă la distanță: %s",
diff --git a/apps/dav/l10n/ro.json b/apps/dav/l10n/ro.json
index f93f03bd4dd..f98340b4c29 100644
--- a/apps/dav/l10n/ro.json
+++ b/apps/dav/l10n/ro.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Calendar",
"Todos" : "De făcut",
+ "Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} a creat calendarul {calendar}",
"You created calendar {calendar}" : "Ai creat calendarul {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} a șters calendarul {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Un <strong>eveniment</strong> din calendar a fost modificat",
"A calendar <strong>todo</strong> was modified" : "O <strong>listă</strong> din calendar a fost modificată",
"Contact birthdays" : "Zile de naștere ale persoanelor de contact",
- "Personal" : "Personal",
"Contacts" : "Persoane de contact",
"Technical details" : "Detalii tehnice",
"Remote Address: %s" : "Adresă la distanță: %s",
diff --git a/apps/dav/l10n/ru.js b/apps/dav/l10n/ru.js
index beb1b3c69ae..fb515a5c4f6 100644
--- a/apps/dav/l10n/ru.js
+++ b/apps/dav/l10n/ru.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Календарь",
"Todos" : "Задачи",
+ "Personal" : "Личное",
"{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
"You created calendar {calendar}" : "Вы создали календарь {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
"A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
- "Personal" : "Личное",
"Contacts" : "Контакты",
"Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
diff --git a/apps/dav/l10n/ru.json b/apps/dav/l10n/ru.json
index f0131c1b709..dbd0a712276 100644
--- a/apps/dav/l10n/ru.json
+++ b/apps/dav/l10n/ru.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Календарь",
"Todos" : "Задачи",
+ "Personal" : "Личное",
"{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
"You created calendar {calendar}" : "Вы создали календарь {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
"A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
- "Personal" : "Личное",
"Contacts" : "Контакты",
"Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
diff --git a/apps/dav/l10n/sk.js b/apps/dav/l10n/sk.js
index 2e1fc5d3699..1eeee8b6e6c 100644
--- a/apps/dav/l10n/sk.js
+++ b/apps/dav/l10n/sk.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendár",
"Todos" : "Úlohy",
+ "Personal" : "Osobné",
"{actor} created calendar {calendar}" : "[actor] vytvoril kalendár [calendar]",
"You created calendar {calendar}" : "Vytvorili ste kalendár [calendar]",
"{actor} deleted calendar {calendar}" : "[actor] zmazal kalendár [calendar]",
@@ -40,10 +41,12 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Udalosť</strong> v kalendári bola upravená",
"A calendar <strong>todo</strong> was modified" : "<>",
"Contact birthdays" : "Narodeniny kontaktu",
- "Personal" : "Osobné",
"Contacts" : "Kontakty",
"Technical details" : "Technické podrobnosti",
"Remote Address: %s" : "Vzdialená adresa: %s",
- "Request ID: %s" : "ID požiadavky: %s"
+ "Request ID: %s" : "ID požiadavky: %s",
+ "CalDAV server" : "Server CalDAV",
+ "Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
+ "Please make sure to properly set up the email settings above." : "Uistite sa, že máte správne nastavené vyššie uvedené nastavenia e-mailu."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/dav/l10n/sk.json b/apps/dav/l10n/sk.json
index cac08a2ca42..d21f92e6f07 100644
--- a/apps/dav/l10n/sk.json
+++ b/apps/dav/l10n/sk.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendár",
"Todos" : "Úlohy",
+ "Personal" : "Osobné",
"{actor} created calendar {calendar}" : "[actor] vytvoril kalendár [calendar]",
"You created calendar {calendar}" : "Vytvorili ste kalendár [calendar]",
"{actor} deleted calendar {calendar}" : "[actor] zmazal kalendár [calendar]",
@@ -38,10 +39,12 @@
"A calendar <strong>event</strong> was modified" : "<strong>Udalosť</strong> v kalendári bola upravená",
"A calendar <strong>todo</strong> was modified" : "<>",
"Contact birthdays" : "Narodeniny kontaktu",
- "Personal" : "Osobné",
"Contacts" : "Kontakty",
"Technical details" : "Technické podrobnosti",
"Remote Address: %s" : "Vzdialená adresa: %s",
- "Request ID: %s" : "ID požiadavky: %s"
+ "Request ID: %s" : "ID požiadavky: %s",
+ "CalDAV server" : "Server CalDAV",
+ "Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
+ "Please make sure to properly set up the email settings above." : "Uistite sa, že máte správne nastavené vyššie uvedené nastavenia e-mailu."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/dav/l10n/sq.js b/apps/dav/l10n/sq.js
index 2ced2eddcbf..ecb7f350e09 100644
--- a/apps/dav/l10n/sq.js
+++ b/apps/dav/l10n/sq.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalendar",
"Todos" : "Për tu bërë",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{aktori} krijoi kalendarin {kalendarin}",
"You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
"A calendar <strong>todo</strong> was modified" : "Një kalendar <strong>todo<strong> u modifikua",
"Contact birthdays" : "Ditëlindjet e kontakteve",
- "Personal" : "Personale",
"Contacts" : "Kontaktet",
"Technical details" : "Detaje teknike",
"Remote Address: %s" : "Adresa remote: %s",
diff --git a/apps/dav/l10n/sq.json b/apps/dav/l10n/sq.json
index dea2472fa16..981ace9d18a 100644
--- a/apps/dav/l10n/sq.json
+++ b/apps/dav/l10n/sq.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalendar",
"Todos" : "Për tu bërë",
+ "Personal" : "Personale",
"{actor} created calendar {calendar}" : "{aktori} krijoi kalendarin {kalendarin}",
"You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
"A calendar <strong>todo</strong> was modified" : "Një kalendar <strong>todo<strong> u modifikua",
"Contact birthdays" : "Ditëlindjet e kontakteve",
- "Personal" : "Personale",
"Contacts" : "Kontaktet",
"Technical details" : "Detaje teknike",
"Remote Address: %s" : "Adresa remote: %s",
diff --git a/apps/dav/l10n/sr.js b/apps/dav/l10n/sr.js
index 5f0b371f1b9..90cb6003b8c 100644
--- a/apps/dav/l10n/sr.js
+++ b/apps/dav/l10n/sr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Календар",
"Todos" : "Подсетници",
+ "Personal" : "Лично",
"{actor} created calendar {calendar}" : "{actor} је направио календар {calendar}",
"You created calendar {calendar}" : "Креирали сте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} је обрисао календар {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "<strong>Догађај</strong> из календара је измењен",
"A calendar <strong>todo</strong> was modified" : "<strong>Подсетник</strong> из календара је измењен",
"Contact birthdays" : "Рођендани контаката",
- "Personal" : "Лично",
"Contacts" : "Контакти",
"Technical details" : "Технички детаљи",
"Remote Address: %s" : "Удаљена адреса: %s",
diff --git a/apps/dav/l10n/sr.json b/apps/dav/l10n/sr.json
index 19e6fc19c2f..45b02431c7e 100644
--- a/apps/dav/l10n/sr.json
+++ b/apps/dav/l10n/sr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Календар",
"Todos" : "Подсетници",
+ "Personal" : "Лично",
"{actor} created calendar {calendar}" : "{actor} је направио календар {calendar}",
"You created calendar {calendar}" : "Креирали сте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} је обрисао календар {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "<strong>Догађај</strong> из календара је измењен",
"A calendar <strong>todo</strong> was modified" : "<strong>Подсетник</strong> из календара је измењен",
"Contact birthdays" : "Рођендани контаката",
- "Personal" : "Лично",
"Contacts" : "Контакти",
"Technical details" : "Технички детаљи",
"Remote Address: %s" : "Удаљена адреса: %s",
diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js
index 25cd0d797c8..aa8765c7dc9 100644
--- a/apps/dav/l10n/sv.js
+++ b/apps/dav/l10n/sv.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Kalender",
"Todos" : "Uppgifter",
+ "Personal" : "Privat",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
"Contact birthdays" : "Födelsedagar",
- "Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
"Remote Address: %s" : "Extern adress: %s",
diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json
index ba76ca55329..0c06957dcfd 100644
--- a/apps/dav/l10n/sv.json
+++ b/apps/dav/l10n/sv.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Uppgifter",
+ "Personal" : "Privat",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
"Contact birthdays" : "Födelsedagar",
- "Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
"Remote Address: %s" : "Extern adress: %s",
diff --git a/apps/dav/l10n/tr.js b/apps/dav/l10n/tr.js
index 82dda8b5365..b14d1bd4d24 100644
--- a/apps/dav/l10n/tr.js
+++ b/apps/dav/l10n/tr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "Takvim",
"Todos" : "Yapılacak İşler",
+ "Personal" : "Kişisel",
"{actor} created calendar {calendar}" : "{actor}, {calendar} takvimini ekledi",
"You created calendar {calendar}" : "{calendar} takvimini eklediniz",
"{actor} deleted calendar {calendar}" : "{actor}, {calendar} takvimini sildi",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "Bir takvim <strong>etkinliği</strong> düzenlendi",
"A calendar <strong>todo</strong> was modified" : "Bir takvim <strong>yapılacak işi</strong> düzenlendi",
"Contact birthdays" : "Kişi doğum günleri",
- "Personal" : "Kişisel",
"Contacts" : "Kişiler",
"Technical details" : "Teknik ayrıntılar",
"Remote Address: %s" : "Uzak Adres: %s",
diff --git a/apps/dav/l10n/tr.json b/apps/dav/l10n/tr.json
index 35e56c6b69b..23cbfbaac35 100644
--- a/apps/dav/l10n/tr.json
+++ b/apps/dav/l10n/tr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "Takvim",
"Todos" : "Yapılacak İşler",
+ "Personal" : "Kişisel",
"{actor} created calendar {calendar}" : "{actor}, {calendar} takvimini ekledi",
"You created calendar {calendar}" : "{calendar} takvimini eklediniz",
"{actor} deleted calendar {calendar}" : "{actor}, {calendar} takvimini sildi",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "Bir takvim <strong>etkinliği</strong> düzenlendi",
"A calendar <strong>todo</strong> was modified" : "Bir takvim <strong>yapılacak işi</strong> düzenlendi",
"Contact birthdays" : "Kişi doğum günleri",
- "Personal" : "Kişisel",
"Contacts" : "Kişiler",
"Technical details" : "Teknik ayrıntılar",
"Remote Address: %s" : "Uzak Adres: %s",
diff --git a/apps/dav/l10n/zh_CN.js b/apps/dav/l10n/zh_CN.js
index 049c0e2b542..e0ee9015402 100644
--- a/apps/dav/l10n/zh_CN.js
+++ b/apps/dav/l10n/zh_CN.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Calendar" : "日历",
"Todos" : "待办事项",
+ "Personal" : "个人",
"{actor} created calendar {calendar}" : "{actor} 创建了日历 {calendar}",
"You created calendar {calendar}" : "您创建的日历 {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} 删除了日历 {calendar}",
@@ -40,7 +41,6 @@ OC.L10N.register(
"A calendar <strong>event</strong> was modified" : "日历中<strong>事件</strong>已经修改",
"A calendar <strong>todo</strong> was modified" : "列表中<strong>待办事项</strong>已经修改",
"Contact birthdays" : "联系人生日",
- "Personal" : "个人",
"Contacts" : "联系人",
"Technical details" : "技术细节",
"Remote Address: %s" : "远程地址: %s",
diff --git a/apps/dav/l10n/zh_CN.json b/apps/dav/l10n/zh_CN.json
index 7e215d624d2..30419409556 100644
--- a/apps/dav/l10n/zh_CN.json
+++ b/apps/dav/l10n/zh_CN.json
@@ -1,6 +1,7 @@
{ "translations": {
"Calendar" : "日历",
"Todos" : "待办事项",
+ "Personal" : "个人",
"{actor} created calendar {calendar}" : "{actor} 创建了日历 {calendar}",
"You created calendar {calendar}" : "您创建的日历 {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} 删除了日历 {calendar}",
@@ -38,7 +39,6 @@
"A calendar <strong>event</strong> was modified" : "日历中<strong>事件</strong>已经修改",
"A calendar <strong>todo</strong> was modified" : "列表中<strong>待办事项</strong>已经修改",
"Contact birthdays" : "联系人生日",
- "Personal" : "个人",
"Contacts" : "联系人",
"Technical details" : "技术细节",
"Remote Address: %s" : "远程地址: %s",
diff --git a/apps/dav/lib/CalDAV/Activity/Backend.php b/apps/dav/lib/CalDAV/Activity/Backend.php
index f8cc82407fd..c1a68c1682c 100644
--- a/apps/dav/lib/CalDAV/Activity/Backend.php
+++ b/apps/dav/lib/CalDAV/Activity/Backend.php
@@ -135,8 +135,12 @@ class Backend {
->setSubject(
$user === $currentUser ? $action . '_self' : $action,
[
- $currentUser,
- $calendarData['{DAV:}displayname'],
+ 'actor' => $currentUser,
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
]
);
$this->activityManager->publish($event);
@@ -187,8 +191,13 @@ class Backend {
if ($owner !== $principal[2]) {
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'user' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -201,7 +210,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_UNSHARE_USER . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -212,8 +220,13 @@ class Backend {
$this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_UNSHARE_USER);
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'group' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -224,7 +237,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_UNSHARE_GROUP . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -250,8 +262,13 @@ class Backend {
if ($owner !== $principal[2]) {
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'user' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -262,7 +279,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_SHARE_USER . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -273,8 +289,13 @@ class Backend {
$this->triggerActivityGroup($principal[2], $event, $calendarData, Calendar::SUBJECT_SHARE_USER);
$parameters = [
- $principal[2],
- $calendarData['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'group' => $principal[2],
];
if ($owner === $event->getAuthor()) {
@@ -285,7 +306,6 @@ class Backend {
$this->activityManager->publish($event);
$subject = Calendar::SUBJECT_SHARE_GROUP . '_by';
- $parameters[] = $event->getAuthor();
}
$event->setAffectedUser($owner)
@@ -347,8 +367,12 @@ class Backend {
->setSubject(
$user === $event->getAuthor() && $subjectSelf ? $subjectSelf : $subject,
[
- $event->getAuthor(),
- $properties['{DAV:}displayname'],
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $properties['id'],
+ 'uri' => $properties['uri'],
+ 'name' => $properties['{DAV:}displayname'],
+ ],
]
);
@@ -401,9 +425,13 @@ class Backend {
->setSubject(
$user === $currentUser ? $action . '_self' : $action,
[
- $currentUser,
- $calendarData['{DAV:}displayname'],
- [
+ 'actor' => $event->getAuthor(),
+ 'calendar' => [
+ 'id' => (int) $calendarData['id'],
+ 'uri' => $calendarData['uri'],
+ 'name' => $calendarData['{DAV:}displayname'],
+ ],
+ 'object' => [
'id' => $object['id'],
'name' => $object['name'],
],
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Base.php b/apps/dav/lib/CalDAV/Activity/Provider/Base.php
index 72fdd681b8a..983d05310ac 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Base.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Base.php
@@ -21,8 +21,10 @@
namespace OCA\DAV\CalDAV\Activity\Provider;
+use OCA\DAV\CalDAV\CalDavBackend;
use OCP\Activity\IEvent;
use OCP\Activity\IProvider;
+use OCP\IL10N;
use OCP\IUser;
use OCP\IUserManager;
@@ -64,7 +66,7 @@ abstract class Base implements IProvider {
protected function generateObjectParameter($eventData) {
if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
throw new \InvalidArgumentException();
- };
+ }
return [
'type' => 'calendar-event',
@@ -74,11 +76,33 @@ abstract class Base implements IProvider {
}
/**
+ * @param array $data
+ * @param IL10N $l
+ * @return array
+ */
+ protected function generateCalendarParameter($data, IL10N $l) {
+ if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
+ $data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
+ return [
+ 'type' => 'calendar',
+ 'id' => $data['id'],
+ 'name' => $l->t('Personal'),
+ ];
+ }
+
+ return [
+ 'type' => 'calendar',
+ 'id' => $data['id'],
+ 'name' => $data['name'],
+ ];
+ }
+
+ /**
* @param int $id
* @param string $name
* @return array
*/
- protected function generateCalendarParameter($id, $name) {
+ protected function generateLegacyCalendarParameter($id, $name) {
return [
'type' => 'calendar',
'id' => $id,
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
index 36d425ecf63..fb4a0ff45a8 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php
@@ -156,6 +156,56 @@ class Calendar extends Base {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
+ // Nextcloud 13+
+ if (isset($parameters['calendar'])) {
+ switch ($subject) {
+ case self::SUBJECT_ADD:
+ case self::SUBJECT_ADD . '_self':
+ case self::SUBJECT_DELETE:
+ case self::SUBJECT_DELETE . '_self':
+ case self::SUBJECT_UPDATE:
+ case self::SUBJECT_UPDATE . '_self':
+ case self::SUBJECT_SHARE_USER:
+ case self::SUBJECT_UNSHARE_USER:
+ case self::SUBJECT_UNSHARE_USER . '_self':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ ];
+ case self::SUBJECT_SHARE_USER . '_you':
+ case self::SUBJECT_UNSHARE_USER . '_you':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'user' => $this->generateUserParameter($parameters['user']),
+ ];
+ case self::SUBJECT_SHARE_USER . '_by':
+ case self::SUBJECT_UNSHARE_USER . '_by':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'user' => $this->generateUserParameter($parameters['user']),
+ ];
+ case self::SUBJECT_SHARE_GROUP . '_you':
+ case self::SUBJECT_UNSHARE_GROUP . '_you':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'group' => $this->generateGroupParameter($parameters['group']),
+ ];
+ case self::SUBJECT_SHARE_GROUP . '_by':
+ case self::SUBJECT_UNSHARE_GROUP . '_by':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'group' => $this->generateGroupParameter($parameters['group']),
+ ];
+ }
+ }
+
+ // Legacy - Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
switch ($subject) {
case self::SUBJECT_ADD:
case self::SUBJECT_ADD . '_self':
@@ -168,32 +218,32 @@ class Calendar extends Base {
case self::SUBJECT_UNSHARE_USER . '_self':
return [
'actor' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
];
case self::SUBJECT_SHARE_USER . '_you':
case self::SUBJECT_UNSHARE_USER . '_you':
return [
'user' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
];
case self::SUBJECT_SHARE_USER . '_by':
case self::SUBJECT_UNSHARE_USER . '_by':
return [
'user' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'actor' => $this->generateUserParameter($parameters[2]),
];
case self::SUBJECT_SHARE_GROUP . '_you':
case self::SUBJECT_UNSHARE_GROUP . '_you':
return [
'group' => $this->generateGroupParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
];
case self::SUBJECT_SHARE_GROUP . '_by':
case self::SUBJECT_UNSHARE_GROUP . '_by':
return [
'group' => $this->generateGroupParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'actor' => $this->generateUserParameter($parameters[2]),
];
}
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Event.php b/apps/dav/lib/CalDAV/Activity/Provider/Event.php
index 2c2e3d01c28..7b515d78b14 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Event.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Event.php
@@ -118,20 +118,46 @@ class Event extends Base {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
+ // Nextcloud 13+
+ if (isset($parameters['calendar'])) {
+ switch ($subject) {
+ case self::SUBJECT_OBJECT_ADD . '_event':
+ case self::SUBJECT_OBJECT_DELETE . '_event':
+ case self::SUBJECT_OBJECT_UPDATE . '_event':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'event' => $this->generateObjectParameter($parameters['object']),
+ ];
+ case self::SUBJECT_OBJECT_ADD . '_event_self':
+ case self::SUBJECT_OBJECT_DELETE . '_event_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_event_self':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'event' => $this->generateObjectParameter($parameters['object']),
+ ];
+ }
+ }
+
+ // Legacy - Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
switch ($subject) {
case self::SUBJECT_OBJECT_ADD . '_event':
case self::SUBJECT_OBJECT_DELETE . '_event':
case self::SUBJECT_OBJECT_UPDATE . '_event':
return [
'actor' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'event' => $this->generateObjectParameter($parameters[2]),
];
case self::SUBJECT_OBJECT_ADD . '_event_self':
case self::SUBJECT_OBJECT_DELETE . '_event_self':
case self::SUBJECT_OBJECT_UPDATE . '_event_self':
return [
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'event' => $this->generateObjectParameter($parameters[2]),
];
}
diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Todo.php b/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
index a665caa0e6a..20d7afef028 100644
--- a/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Provider/Todo.php
@@ -87,6 +87,36 @@ class Todo extends Event {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
+ // Nextcloud 13+
+ if (isset($parameters['calendar'])) {
+ switch ($subject) {
+ case self::SUBJECT_OBJECT_ADD . '_todo':
+ case self::SUBJECT_OBJECT_DELETE . '_todo':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_completed':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
+ return [
+ 'actor' => $this->generateUserParameter($parameters['actor']),
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'todo' => $this->generateObjectParameter($parameters['object']),
+ ];
+ case self::SUBJECT_OBJECT_ADD . '_todo_self':
+ case self::SUBJECT_OBJECT_DELETE . '_todo_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
+ case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
+ return [
+ 'calendar' => $this->generateCalendarParameter($parameters['calendar'], $this->l),
+ 'todo' => $this->generateObjectParameter($parameters['object']),
+ ];
+ }
+ }
+
+ // Legacy - Do NOT Remove unless necessary
+ // Removing this will break parsing of activities that were created on
+ // Nextcloud 12, so we should keep this as long as it's acceptable.
+ // Otherwise if people upgrade over multiple releases in a short period,
+ // they will get the dead entries in their stream.
switch ($subject) {
case self::SUBJECT_OBJECT_ADD . '_todo':
case self::SUBJECT_OBJECT_DELETE . '_todo':
@@ -95,7 +125,7 @@ class Todo extends Event {
case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action':
return [
'actor' => $this->generateUserParameter($parameters[0]),
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'todo' => $this->generateObjectParameter($parameters[2]),
];
case self::SUBJECT_OBJECT_ADD . '_todo_self':
@@ -104,7 +134,7 @@ class Todo extends Event {
case self::SUBJECT_OBJECT_UPDATE . '_todo_completed_self':
case self::SUBJECT_OBJECT_UPDATE . '_todo_needs_action_self':
return [
- 'calendar' => $this->generateCalendarParameter((int)$event->getObjectId(), $parameters[1]),
+ 'calendar' => $this->generateLegacyCalendarParameter((int)$event->getObjectId(), $parameters[1]),
'todo' => $this->generateObjectParameter($parameters[2]),
];
}
diff --git a/apps/dav/lib/CalDAV/CalendarObject.php b/apps/dav/lib/CalDAV/CalendarObject.php
index 86aa2c98e8d..c268b7410cd 100644
--- a/apps/dav/lib/CalDAV/CalendarObject.php
+++ b/apps/dav/lib/CalDAV/CalendarObject.php
@@ -37,10 +37,24 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
*/
function get() {
$data = parent::get();
- if ($this->isShared() && $this->objectData['classification'] === CalDavBackend::CLASSIFICATION_CONFIDENTIAL) {
- return $this->createConfidentialObject($data);
+
+ if (!$this->isShared()) {
+ return $data;
+ }
+
+ $vObject = Reader::read($data);
+
+ // remove VAlarms if calendar is shared read-only
+ if (!$this->canWrite()) {
+ $this->removeVAlarms($vObject);
+ }
+
+ // shows as busy if event is declared confidential
+ if ($this->objectData['classification'] === CalDavBackend::CLASSIFICATION_CONFIDENTIAL) {
+ $this->createConfidentialObject($vObject);
}
- return $data;
+
+ return $vObject->serialize();
}
protected function isShared() {
@@ -52,13 +66,10 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
}
/**
- * @param string $calData
- * @return string
+ * @param Component\VCalendar $vObject
+ * @return void
*/
- private static function createConfidentialObject($calData) {
-
- $vObject = Reader::read($calData);
-
+ private static function createConfidentialObject(Component\VCalendar $vObject) {
/** @var Component $vElement */
$vElement = null;
if(isset($vObject->VEVENT)) {
@@ -92,8 +103,27 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
}
}
}
-
- return $vObject->serialize();
}
+ /**
+ * @param Component\VCalendar $vObject
+ * @return void
+ */
+ private function removeVAlarms(Component\VCalendar $vObject) {
+ $subcomponents = $vObject->getComponents();
+
+ foreach($subcomponents as $subcomponent) {
+ unset($subcomponent->VALARM);
+ }
+ }
+
+ /**
+ * @return bool
+ */
+ private function canWrite() {
+ if (isset($this->calendarInfo['{http://owncloud.org/ns}read-only'])) {
+ return !$this->calendarInfo['{http://owncloud.org/ns}read-only'];
+ }
+ return true;
+ }
}
diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
index d8d15e8f1f7..dd48d8172d3 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php
@@ -108,11 +108,13 @@ class BackendTest extends TestCase {
[Calendar::SUBJECT_ADD, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], [], [], '', 'admin', null, ['admin']],
[Calendar::SUBJECT_ADD, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], [], [], 'test2', 'test2', null, ['admin']],
@@ -122,17 +124,20 @@ class BackendTest extends TestCase {
[Calendar::SUBJECT_UPDATE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], '', 'admin', null, ['admin']],
// Visible change
[Calendar::SUBJECT_UPDATE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], ['{DAV:}displayname' => 'Name'], '', 'admin', ['user1'], ['user1', 'admin']],
[Calendar::SUBJECT_UPDATE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], ['{DAV:}displayname' => 'Name'], 'test2', 'test2', ['user1'], ['user1', 'admin']],
@@ -141,16 +146,19 @@ class BackendTest extends TestCase {
[Calendar::SUBJECT_DELETE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], '', 'admin', [], ['admin']],
[Calendar::SUBJECT_DELETE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], '', 'admin', ['user1'], ['user1', 'admin']],
[Calendar::SUBJECT_DELETE, [
'principaluri' => 'principal/user/admin',
'id' => 42,
+ 'uri' => 'this-uri',
'{DAV:}displayname' => 'Name of calendar',
], ['shares'], [], 'test2', 'test2', ['user1'], ['user1', 'admin']],
];
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php b/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php
index 85eb439f100..adffaf27ded 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php
@@ -24,6 +24,7 @@ namespace OCA\DAV\Tests\unit\CalDAV\Activity\Provider;
use OCA\DAV\CalDAV\Activity\Provider\Base;
use OCP\Activity\IEvent;
use OCP\Activity\IProvider;
+use OCP\IL10N;
use OCP\IUser;
use OCP\IUserManager;
use Test\TestCase;
@@ -113,22 +114,51 @@ class BaseTest extends TestCase {
public function dataGenerateCalendarParameter() {
return [
+ [['id' => 23, 'uri' => 'foo', 'name' => 'bar'], 'bar'],
+ [['id' => 42, 'uri' => 'foo', 'name' => 'Personal'], 'Personal'],
+ [['id' => 42, 'uri' => 'personal', 'name' => 'bar'], 'bar'],
+ [['id' => 42, 'uri' => 'personal', 'name' => 'Personal'], 't(Personal)'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataGenerateCalendarParameter
+ * @param array $data
+ * @param string $name
+ */
+ public function testGenerateCalendarParameter(array $data, $name) {
+ $l = $this->createMock(IL10N::class);
+ $l->expects($this->any())
+ ->method('t')
+ ->willReturnCallback(function($string, $args) {
+ return 't(' . vsprintf($string, $args) . ')';
+ });
+
+ $this->assertEquals([
+ 'type' => 'calendar',
+ 'id' => $data['id'],
+ 'name' => $name,
+ ], $this->invokePrivate($this->provider, 'generateCalendarParameter', [$data, $l]));
+ }
+
+ public function dataGenerateLegacyCalendarParameter() {
+ return [
[23, 'c1'],
[42, 'c2'],
];
}
/**
- * @dataProvider dataGenerateCalendarParameter
+ * @dataProvider dataGenerateLegacyCalendarParameter
* @param int $id
* @param string $name
*/
- public function testGenerateCalendarParameter($id, $name) {
+ public function testGenerateLegacyCalendarParameter($id, $name) {
$this->assertEquals([
'type' => 'calendar',
'id' => $id,
'name' => $name,
- ], $this->invokePrivate($this->provider, 'generateCalendarParameter', [$id, $name]));
+ ], $this->invokePrivate($this->provider, 'generateLegacyCalendarParameter', [$id, $name]));
}
public function dataGenerateGroupParameter() {
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index 9ad773dd747..3fb29fd0c6b 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php
@@ -381,4 +381,184 @@ EOD;
[2, true]
];
}
+
+ public function testRemoveVAlarms() {
+ $publicObjectData = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+DTSTAMP:20171022T125130
+LAST-MODIFIED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Foo bar blub
+CLASS:PUBLIC
+STATUS:CONFIRMED
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:-PT15M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+ $confidentialObjectData = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+DTSTAMP:20171022T125130
+LAST-MODIFIED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Foo bar blub
+CLASS:CONFIDENTIAL
+STATUS:CONFIRMED
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:-PT15M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+ $publicObjectDataWithoutVAlarm = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+DTSTAMP:20171022T125130
+LAST-MODIFIED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Foo bar blub
+CLASS:PUBLIC
+STATUS:CONFIRMED
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+ $confidentialObjectCleaned = <<<EOD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Nextcloud calendar v1.5.6
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20171022T125130
+UID:PPL24TH8UGOWE94XET87ER
+SUMMARY:Busy
+CLASS:CONFIDENTIAL
+DTSTART;VALUE=DATE:20171024
+DTEND;VALUE=DATE:20171025
+END:VEVENT
+END:VCALENDAR
+
+EOD;
+
+
+
+ $publicObject = ['uri' => 'event-0',
+ 'classification' => CalDavBackend::CLASSIFICATION_PUBLIC,
+ 'calendardata' => $publicObjectData];
+
+ $confidentialObject = ['uri' => 'event-1',
+ 'classification' => CalDavBackend::CLASSIFICATION_CONFIDENTIAL,
+ 'calendardata' => $confidentialObjectData];
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */
+ $backend = $this->createMock(CalDavBackend::class);
+ $backend->expects($this->any())
+ ->method('getCalendarObjects')
+ ->willReturn([$publicObject, $confidentialObject]);
+
+ $backend->expects($this->any())
+ ->method('getMultipleCalendarObjects')
+ ->with(666, ['event-0', 'event-1'])
+ ->willReturn([$publicObject, $confidentialObject]);
+
+ $backend->expects($this->any())
+ ->method('getCalendarObject')
+ ->will($this->returnCallback(function($cId, $uri) use($publicObject, $confidentialObject) {
+ switch($uri) {
+ case 'event-0':
+ return $publicObject;
+
+ case 'event-1':
+ return $confidentialObject;
+
+ default:
+ throw new \Exception('unexpected uri');
+ }
+ }));
+
+ $backend->expects($this->any())
+ ->method('applyShareAcl')
+ ->willReturnArgument(1);
+
+ $calendarInfoOwner = [
+ '{http://owncloud.org/ns}owner-principal' => 'user1',
+ 'principaluri' => 'user1',
+ 'id' => 666,
+ 'uri' => 'cal',
+ ];
+ $calendarInfoSharedRW = [
+ '{http://owncloud.org/ns}owner-principal' => 'user1',
+ 'principaluri' => 'user2',
+ 'id' => 666,
+ 'uri' => 'cal',
+ ];
+ $calendarInfoSharedRO = [
+ '{http://owncloud.org/ns}owner-principal' => 'user1',
+ '{http://owncloud.org/ns}read-only' => true,
+ 'principaluri' => 'user2',
+ 'id' => 666,
+ 'uri' => 'cal',
+ ];
+
+ $ownerCalendar = new Calendar($backend, $calendarInfoOwner, $this->l10n);
+ $rwCalendar = new Calendar($backend, $calendarInfoSharedRW, $this->l10n);
+ $roCalendar = new Calendar($backend, $calendarInfoSharedRO, $this->l10n);
+
+ $this->assertEquals(count($ownerCalendar->getChildren()), 2);
+ $this->assertEquals(count($rwCalendar->getChildren()), 2);
+ $this->assertEquals(count($roCalendar->getChildren()), 2);
+
+ // calendar data shall not be altered for the owner
+ $this->assertEquals($ownerCalendar->getChild('event-0')->get(), $publicObjectData);
+ $this->assertEquals($ownerCalendar->getChild('event-1')->get(), $confidentialObjectData);
+
+ // valarms shall not be removed for read-write shares
+ $this->assertEquals(
+ $this->fixLinebreak($rwCalendar->getChild('event-0')->get()),
+ $this->fixLinebreak($publicObjectData));
+ $this->assertEquals(
+ $this->fixLinebreak($rwCalendar->getChild('event-1')->get()),
+ $this->fixLinebreak($confidentialObjectCleaned));
+
+ // valarms shall be removed for read-only shares
+ $this->assertEquals(
+ $this->fixLinebreak($roCalendar->getChild('event-0')->get()),
+ $this->fixLinebreak($publicObjectDataWithoutVAlarm));
+ $this->assertEquals(
+ $this->fixLinebreak($roCalendar->getChild('event-1')->get()),
+ $this->fixLinebreak($confidentialObjectCleaned));
+
+ }
+
+ private function fixLinebreak($str) {
+ return preg_replace('~(*BSR_ANYCRLF)\R~', "\r\n", $str);
+ }
}
diff --git a/apps/encryption/composer/autoload.php b/apps/encryption/composer/autoload.php
new file mode 100644
index 00000000000..52febf19470
--- /dev/null
+++ b/apps/encryption/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitEncryption::getLoader();
diff --git a/apps/encryption/composer/composer.json b/apps/encryption/composer/composer.json
new file mode 100644
index 00000000000..5b38c9dc683
--- /dev/null
+++ b/apps/encryption/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Encryption"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Encryption\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/encryption/composer/composer/ClassLoader.php b/apps/encryption/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/encryption/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/encryption/composer/composer/LICENSE b/apps/encryption/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/encryption/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/encryption/composer/composer/autoload_classmap.php b/apps/encryption/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..7ab0056cc8c
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_classmap.php
@@ -0,0 +1,36 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Encryption\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Encryption\\Command\\DisableMasterKey' => $baseDir . '/../lib/Command/DisableMasterKey.php',
+ 'OCA\\Encryption\\Command\\EnableMasterKey' => $baseDir . '/../lib/Command/EnableMasterKey.php',
+ 'OCA\\Encryption\\Command\\MigrateKeys' => $baseDir . '/../lib/Command/MigrateKeys.php',
+ 'OCA\\Encryption\\Controller\\RecoveryController' => $baseDir . '/../lib/Controller/RecoveryController.php',
+ 'OCA\\Encryption\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Encryption\\Controller\\StatusController' => $baseDir . '/../lib/Controller/StatusController.php',
+ 'OCA\\Encryption\\Crypto\\Crypt' => $baseDir . '/../lib/Crypto/Crypt.php',
+ 'OCA\\Encryption\\Crypto\\DecryptAll' => $baseDir . '/../lib/Crypto/DecryptAll.php',
+ 'OCA\\Encryption\\Crypto\\EncryptAll' => $baseDir . '/../lib/Crypto/EncryptAll.php',
+ 'OCA\\Encryption\\Crypto\\Encryption' => $baseDir . '/../lib/Crypto/Encryption.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyDecryptException' => $baseDir . '/../lib/Exceptions/MultiKeyDecryptException.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyEncryptException' => $baseDir . '/../lib/Exceptions/MultiKeyEncryptException.php',
+ 'OCA\\Encryption\\Exceptions\\PrivateKeyMissingException' => $baseDir . '/../lib/Exceptions/PrivateKeyMissingException.php',
+ 'OCA\\Encryption\\Exceptions\\PublicKeyMissingException' => $baseDir . '/../lib/Exceptions/PublicKeyMissingException.php',
+ 'OCA\\Encryption\\HookManager' => $baseDir . '/../lib/HookManager.php',
+ 'OCA\\Encryption\\Hooks\\Contracts\\IHook' => $baseDir . '/../lib/Hooks/Contracts/IHook.php',
+ 'OCA\\Encryption\\Hooks\\UserHooks' => $baseDir . '/../lib/Hooks/UserHooks.php',
+ 'OCA\\Encryption\\KeyManager' => $baseDir . '/../lib/KeyManager.php',
+ 'OCA\\Encryption\\Migration' => $baseDir . '/../lib/Migration.php',
+ 'OCA\\Encryption\\Migration\\SetMasterKeyStatus' => $baseDir . '/../lib/Migration/SetMasterKeyStatus.php',
+ 'OCA\\Encryption\\Recovery' => $baseDir . '/../lib/Recovery.php',
+ 'OCA\\Encryption\\Session' => $baseDir . '/../lib/Session.php',
+ 'OCA\\Encryption\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\Encryption\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+ 'OCA\\Encryption\\Users\\Setup' => $baseDir . '/../lib/Users/Setup.php',
+ 'OCA\\Encryption\\Util' => $baseDir . '/../lib/Util.php',
+);
diff --git a/apps/encryption/composer/composer/autoload_namespaces.php b/apps/encryption/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/encryption/composer/composer/autoload_psr4.php b/apps/encryption/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..6baeba923d6
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Encryption\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/encryption/composer/composer/autoload_real.php b/apps/encryption/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..fae90387a09
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitEncryption
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitEncryption', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitEncryption', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitEncryption::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/encryption/composer/composer/autoload_static.php b/apps/encryption/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..b3ec7c52fe8
--- /dev/null
+++ b/apps/encryption/composer/composer/autoload_static.php
@@ -0,0 +1,62 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitEncryption
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Encryption\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Encryption\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Encryption\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Encryption\\Command\\DisableMasterKey' => __DIR__ . '/..' . '/../lib/Command/DisableMasterKey.php',
+ 'OCA\\Encryption\\Command\\EnableMasterKey' => __DIR__ . '/..' . '/../lib/Command/EnableMasterKey.php',
+ 'OCA\\Encryption\\Command\\MigrateKeys' => __DIR__ . '/..' . '/../lib/Command/MigrateKeys.php',
+ 'OCA\\Encryption\\Controller\\RecoveryController' => __DIR__ . '/..' . '/../lib/Controller/RecoveryController.php',
+ 'OCA\\Encryption\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Encryption\\Controller\\StatusController' => __DIR__ . '/..' . '/../lib/Controller/StatusController.php',
+ 'OCA\\Encryption\\Crypto\\Crypt' => __DIR__ . '/..' . '/../lib/Crypto/Crypt.php',
+ 'OCA\\Encryption\\Crypto\\DecryptAll' => __DIR__ . '/..' . '/../lib/Crypto/DecryptAll.php',
+ 'OCA\\Encryption\\Crypto\\EncryptAll' => __DIR__ . '/..' . '/../lib/Crypto/EncryptAll.php',
+ 'OCA\\Encryption\\Crypto\\Encryption' => __DIR__ . '/..' . '/../lib/Crypto/Encryption.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyDecryptException' => __DIR__ . '/..' . '/../lib/Exceptions/MultiKeyDecryptException.php',
+ 'OCA\\Encryption\\Exceptions\\MultiKeyEncryptException' => __DIR__ . '/..' . '/../lib/Exceptions/MultiKeyEncryptException.php',
+ 'OCA\\Encryption\\Exceptions\\PrivateKeyMissingException' => __DIR__ . '/..' . '/../lib/Exceptions/PrivateKeyMissingException.php',
+ 'OCA\\Encryption\\Exceptions\\PublicKeyMissingException' => __DIR__ . '/..' . '/../lib/Exceptions/PublicKeyMissingException.php',
+ 'OCA\\Encryption\\HookManager' => __DIR__ . '/..' . '/../lib/HookManager.php',
+ 'OCA\\Encryption\\Hooks\\Contracts\\IHook' => __DIR__ . '/..' . '/../lib/Hooks/Contracts/IHook.php',
+ 'OCA\\Encryption\\Hooks\\UserHooks' => __DIR__ . '/..' . '/../lib/Hooks/UserHooks.php',
+ 'OCA\\Encryption\\KeyManager' => __DIR__ . '/..' . '/../lib/KeyManager.php',
+ 'OCA\\Encryption\\Migration' => __DIR__ . '/..' . '/../lib/Migration.php',
+ 'OCA\\Encryption\\Migration\\SetMasterKeyStatus' => __DIR__ . '/..' . '/../lib/Migration/SetMasterKeyStatus.php',
+ 'OCA\\Encryption\\Recovery' => __DIR__ . '/..' . '/../lib/Recovery.php',
+ 'OCA\\Encryption\\Session' => __DIR__ . '/..' . '/../lib/Session.php',
+ 'OCA\\Encryption\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\Encryption\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ 'OCA\\Encryption\\Users\\Setup' => __DIR__ . '/..' . '/../lib/Users/Setup.php',
+ 'OCA\\Encryption\\Util' => __DIR__ . '/..' . '/../lib/Util.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitEncryption::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitEncryption::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitEncryption::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/encryption/l10n/es_CR.js b/apps/encryption/l10n/es_CR.js
new file mode 100644
index 00000000000..424b1f9313f
--- /dev/null
+++ b/apps/encryption/l10n/es_CR.js
@@ -0,0 +1,65 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "Missing recovery key password" : "No se encontró la contraseña de la llave de recuperación",
+ "Please repeat the recovery key password" : "Por favor reingresa la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Por favor proporciona tu contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Por favor proporciona una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Por favor reingresa la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Por favor verifica que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, por favor intentalo de nuevo o contacta a tu administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, por favor vuelvelo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Por favor ejecuta 'occ encryption:migrate' o contacta a tu adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Por favor actualiza la contraseña de tu llave privada en tus configuraciones personales para recuperar el acceso a tus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero tus llaves no han sido inicializadas. Por favor cierra sesión e inicia sesión de nuevo. ",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Por favor activa el encriptado del lado del servidor en los ajustes de administración para usar el módulo de encripción.",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño del archivo que lo vuelva a compartir contigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño que vuelva a compartirlo contigo.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción de lado del servidor. Tus archivos fueron encriptados usando la contraseña '%s'\n\nPor favor inicia sesión en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza su contraseña de encripción ingresando esta contraseña en el campo 'contraseña de inicio de sesión anterior' y tu contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El elemento compartido expirará el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Tus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Por favor inicia sesisón en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza tu contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y tu contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero tus llaves no han sido inicializadas, por favor sal y vuelve a entrar a tu sesión",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
+ "Change Password" : "Cambiar contraseña",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Tu contraseña de llave privada ya no corresónde con tu contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establece tu contraseña de llave privada a tu contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerdas tu contraseña anterior le puedes pedir a tu administrador que recupere tus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
+ "Enable password recovery:" : "Habilitar la recuperación de contraseña:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción te permitirá volver a tener acceso a tus archivos encriptados en caso de que pierdas la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, por favor cierra la sesión y vuelve a iniciarla."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/es_CR.json b/apps/encryption/l10n/es_CR.json
new file mode 100644
index 00000000000..dabe0c4c41f
--- /dev/null
+++ b/apps/encryption/l10n/es_CR.json
@@ -0,0 +1,63 @@
+{ "translations": {
+ "Missing recovery key password" : "No se encontró la contraseña de la llave de recuperación",
+ "Please repeat the recovery key password" : "Por favor reingresa la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Por favor proporciona tu contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Por favor proporciona una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Por favor reingresa la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Por favor verifica que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, por favor intentalo de nuevo o contacta a tu administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, por favor vuelvelo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Por favor ejecuta 'occ encryption:migrate' o contacta a tu adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Por favor actualiza la contraseña de tu llave privada en tus configuraciones personales para recuperar el acceso a tus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero tus llaves no han sido inicializadas. Por favor cierra sesión e inicia sesión de nuevo. ",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Por favor activa el encriptado del lado del servidor en los ajustes de administración para usar el módulo de encripción.",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño del archivo que lo vuelva a compartir contigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño que vuelva a compartirlo contigo.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción de lado del servidor. Tus archivos fueron encriptados usando la contraseña '%s'\n\nPor favor inicia sesión en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza su contraseña de encripción ingresando esta contraseña en el campo 'contraseña de inicio de sesión anterior' y tu contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El elemento compartido expirará el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Tus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Por favor inicia sesisón en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza tu contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y tu contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero tus llaves no han sido inicializadas, por favor sal y vuelve a entrar a tu sesión",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
+ "Change Password" : "Cambiar contraseña",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Tu contraseña de llave privada ya no corresónde con tu contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establece tu contraseña de llave privada a tu contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerdas tu contraseña anterior le puedes pedir a tu administrador que recupere tus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
+ "Enable password recovery:" : "Habilitar la recuperación de contraseña:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción te permitirá volver a tener acceso a tus archivos encriptados en caso de que pierdas la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, por favor cierra la sesión y vuelve a iniciarla."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/es_DO.js b/apps/encryption/l10n/es_DO.js
new file mode 100644
index 00000000000..424b1f9313f
--- /dev/null
+++ b/apps/encryption/l10n/es_DO.js
@@ -0,0 +1,65 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "Missing recovery key password" : "No se encontró la contraseña de la llave de recuperación",
+ "Please repeat the recovery key password" : "Por favor reingresa la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Por favor proporciona tu contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Por favor proporciona una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Por favor reingresa la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Por favor verifica que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, por favor intentalo de nuevo o contacta a tu administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, por favor vuelvelo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Por favor ejecuta 'occ encryption:migrate' o contacta a tu adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Por favor actualiza la contraseña de tu llave privada en tus configuraciones personales para recuperar el acceso a tus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero tus llaves no han sido inicializadas. Por favor cierra sesión e inicia sesión de nuevo. ",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Por favor activa el encriptado del lado del servidor en los ajustes de administración para usar el módulo de encripción.",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño del archivo que lo vuelva a compartir contigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño que vuelva a compartirlo contigo.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción de lado del servidor. Tus archivos fueron encriptados usando la contraseña '%s'\n\nPor favor inicia sesión en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza su contraseña de encripción ingresando esta contraseña en el campo 'contraseña de inicio de sesión anterior' y tu contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El elemento compartido expirará el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Tus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Por favor inicia sesisón en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza tu contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y tu contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero tus llaves no han sido inicializadas, por favor sal y vuelve a entrar a tu sesión",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
+ "Change Password" : "Cambiar contraseña",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Tu contraseña de llave privada ya no corresónde con tu contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establece tu contraseña de llave privada a tu contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerdas tu contraseña anterior le puedes pedir a tu administrador que recupere tus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
+ "Enable password recovery:" : "Habilitar la recuperación de contraseña:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción te permitirá volver a tener acceso a tus archivos encriptados en caso de que pierdas la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, por favor cierra la sesión y vuelve a iniciarla."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/es_DO.json b/apps/encryption/l10n/es_DO.json
new file mode 100644
index 00000000000..dabe0c4c41f
--- /dev/null
+++ b/apps/encryption/l10n/es_DO.json
@@ -0,0 +1,63 @@
+{ "translations": {
+ "Missing recovery key password" : "No se encontró la contraseña de la llave de recuperación",
+ "Please repeat the recovery key password" : "Por favor reingresa la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Por favor comprueba la contraseña de tu llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Por favor proporciona tu contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Por favor proporciona una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Por favor reingresa la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Por favor verifica que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, por favor intentalo de nuevo o contacta a tu administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, por favor vuelvelo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Por favor ejecuta 'occ encryption:migrate' o contacta a tu adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Por favor actualiza la contraseña de tu llave privada en tus configuraciones personales para recuperar el acceso a tus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero tus llaves no han sido inicializadas. Por favor cierra sesión e inicia sesión de nuevo. ",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Por favor activa el encriptado del lado del servidor en los ajustes de administración para usar el módulo de encripción.",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño del archivo que lo vuelva a compartir contigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compartido. Por favor solicita al dueño que vuelva a compartirlo contigo.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción de lado del servidor. Tus archivos fueron encriptados usando la contraseña '%s'\n\nPor favor inicia sesión en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza su contraseña de encripción ingresando esta contraseña en el campo 'contraseña de inicio de sesión anterior' y tu contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El elemento compartido expirará el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Tus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Por favor inicia sesisón en la interface web, ve a la sección \"módulo de encripción básica\" de tus configuraciones personales y actualiza tu contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y tu contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero tus llaves no han sido inicializadas, por favor sal y vuelve a entrar a tu sesión",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
+ "Change Password" : "Cambiar contraseña",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Tu contraseña de llave privada ya no corresónde con tu contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establece tu contraseña de llave privada a tu contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerdas tu contraseña anterior le puedes pedir a tu administrador que recupere tus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
+ "Enable password recovery:" : "Habilitar la recuperación de contraseña:",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción te permitirá volver a tener acceso a tus archivos encriptados en caso de que pierdas la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, por favor cierra la sesión y vuelve a iniciarla."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/eu.js b/apps/encryption/l10n/eu.js
index 1c8bdf4fa04..8a256e2de16 100644
--- a/apps/encryption/l10n/eu.js
+++ b/apps/encryption/l10n/eu.js
@@ -8,23 +8,48 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako gaitu. Egiaztatu berreskuratze gako pasahitza!",
"Recovery key successfully disabled" : "Berreskuratze gakoa behar bezala desgaitu da",
"Could not disable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako desgaitu. Egiaztatu berreskuratze gako pasahitza!",
+ "Missing parameters" : "Parametroak faltan",
"Please provide the old recovery password" : "Mesedez sartu berreskuratze pasahitz zaharra",
"Please provide a new recovery password" : "Mesedez sartu berreskuratze pasahitz berria",
"Please repeat the new recovery password" : "Mesedez errepikatu berreskuratze pasahitz berria",
"Password successfully changed." : "Pasahitza behar bezala aldatu da.",
"Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.",
+ "Recovery Key disabled" : "Berreskuratze gakoa desgaituta",
+ "Recovery Key enabled" : "Berreskuratze gakoa gaituta",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Ezin da berreskuratze gakoa gaitu, saia zaitez berriz mesedez edo zureadministratzailearekin kontaktuan jarri",
"Could not update the private key password." : "Ezin izan da gako pribatu pasahitza eguneratu. ",
"The old password was not correct, please try again." : "Pasahitz zaharra ez da egokia. Mesedez, saiatu berriro.",
"The current log-in password was not correct, please try again." : "Oraingo pasahitza ez da egokia. Mesedez, saiatu berriro.",
"Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Zure enkriptatze gakoak enkriptatze zaharretik (ownCloud <=8.0) berrira migratubehar duzu. 'occ encryption:migrate' exekuta ezazu mesedez, edo zure administratzailearekin kontaktuan jar zaitez",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu desegokia. Zure gako pribatuaren pasahitza eguneratuezarpen pertsonaletan, enkriptatutako fitxategiak berriz atzitu nahi badituzu",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Enkriptazioa app-a gaituta dago, baina zure gakoak ez dira hasieratu. Saiotikirten eta berriz sartu, mesedez",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Enkriptazio modulua erabili ahal izateko zerbitzariaren aldean enkriptazioagaitu administrazio ezarpenetan",
+ "Encryption app is enabled and ready" : "Enkriptazioa app-a gaituta eta martxan dago",
+ "Bad Signature" : "Sinadura ezegokia",
+ "Missing Signature" : "Sinadura falta da",
+ "one-time password for server-side-encryption" : "aldi bateko pasahitzak zerbitzari-aldeko enkriptaziorako",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin da fitxategi hau irakurri, ziur aski partekatutako fitxategia izango da. Fitxategiaren jabeari berriz partekatzeko eska iezaiozu",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Kaixo\n\nadministradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
"The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Kaixo<br><br>administradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
+ "Default encryption module" : "Defektuzko enkriptazio modulua",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio app-a gaituta dago baina zure gakoak ez dira hasieratu, mesedez saiotik irteneta berriz sar zaitez",
+ "Encrypt the home storage" : "Etxe-biltegia enkriptatu",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aukera hau gaituz gero biltegi orokorreko fitxategi guztiak enkriptatuko dirabestela kanpo biltegian daudenak bakarrik enkriptatuko dira",
+ "Enable recovery key" : "Berreskuratze gakoa gaitu",
+ "Disable recovery key" : "Berreskuratze gakoa desgaitu",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Berreskuratze gakoa fitxategiak enkriptatzeko gako extra bat da.Erabiltzailearen fitxategiak berreskuratzea baimentzen du bere pasahitzagalduz gero.",
"Recovery key password" : "Berreskuratze gako pasahitza",
+ "Repeat recovery key password" : "Berreskuratze gakoaren pasahitza errepikatu",
"Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:",
+ "Old recovery key password" : "Berreskuratze gako zaharraren pasahitza",
+ "New recovery key password" : "Berreskuratze gako berriaren pasahitza",
+ "Repeat new recovery key password" : "Berreskuratze gakoaren pasahitz berria errepikatu",
"Change Password" : "Aldatu Pasahitza",
+ "Basic encryption module" : "Oinarrizko enkriptazio modulua",
"Your private key password no longer matches your log-in password." : "Zure gako pasahitza pribatua ez da dagoeneko bat etortzen zure sartzeko pasahitzarekin.",
"Set your old private key password to your current log-in password:" : "Ezarri zure gako pasahitz zaharra orain duzun sartzeko pasahitzan:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Ez baduzu zure pasahitz zaharra gogoratzen eskatu zure administratzaileari zure fitxategiak berreskuratzeko.",
@@ -34,6 +59,7 @@ OC.L10N.register(
"Enable password recovery:" : "Gaitu pasahitzaren berreskuratzea:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aukera hau gaituz zure enkriptatutako fitxategiak berreskuratu ahal izango dituzu pasahitza galtzekotan",
"Enabled" : "Gaitua",
- "Disabled" : "Ez-gaitua"
+ "Disabled" : "Ez-gaitua",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/eu.json b/apps/encryption/l10n/eu.json
index 0c07ebd477f..e684651f837 100644
--- a/apps/encryption/l10n/eu.json
+++ b/apps/encryption/l10n/eu.json
@@ -6,23 +6,48 @@
"Could not enable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako gaitu. Egiaztatu berreskuratze gako pasahitza!",
"Recovery key successfully disabled" : "Berreskuratze gakoa behar bezala desgaitu da",
"Could not disable recovery key. Please check your recovery key password!" : "Ezin da berreskuratze gako desgaitu. Egiaztatu berreskuratze gako pasahitza!",
+ "Missing parameters" : "Parametroak faltan",
"Please provide the old recovery password" : "Mesedez sartu berreskuratze pasahitz zaharra",
"Please provide a new recovery password" : "Mesedez sartu berreskuratze pasahitz berria",
"Please repeat the new recovery password" : "Mesedez errepikatu berreskuratze pasahitz berria",
"Password successfully changed." : "Pasahitza behar bezala aldatu da.",
"Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.",
+ "Recovery Key disabled" : "Berreskuratze gakoa desgaituta",
+ "Recovery Key enabled" : "Berreskuratze gakoa gaituta",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Ezin da berreskuratze gakoa gaitu, saia zaitez berriz mesedez edo zureadministratzailearekin kontaktuan jarri",
"Could not update the private key password." : "Ezin izan da gako pribatu pasahitza eguneratu. ",
"The old password was not correct, please try again." : "Pasahitz zaharra ez da egokia. Mesedez, saiatu berriro.",
"The current log-in password was not correct, please try again." : "Oraingo pasahitza ez da egokia. Mesedez, saiatu berriro.",
"Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Zure enkriptatze gakoak enkriptatze zaharretik (ownCloud <=8.0) berrira migratubehar duzu. 'occ encryption:migrate' exekuta ezazu mesedez, edo zure administratzailearekin kontaktuan jar zaitez",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu desegokia. Zure gako pribatuaren pasahitza eguneratuezarpen pertsonaletan, enkriptatutako fitxategiak berriz atzitu nahi badituzu",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "Enkriptazioa app-a gaituta dago, baina zure gakoak ez dira hasieratu. Saiotikirten eta berriz sartu, mesedez",
+ "Please enable server side encryption in the admin settings in order to use the encryption module." : "Enkriptazio modulua erabili ahal izateko zerbitzariaren aldean enkriptazioagaitu administrazio ezarpenetan",
+ "Encryption app is enabled and ready" : "Enkriptazioa app-a gaituta eta martxan dago",
+ "Bad Signature" : "Sinadura ezegokia",
+ "Missing Signature" : "Sinadura falta da",
+ "one-time password for server-side-encryption" : "aldi bateko pasahitzak zerbitzari-aldeko enkriptaziorako",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin da fitxategi hau irakurri, ziur aski partekatutako fitxategia izango da. Fitxategiaren jabeari berriz partekatzeko eska iezaiozu",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Kaixo\n\nadministradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
"The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Kaixo<br><br>administradoreak zerbitzari-aldeko enkriptazioa gaitu du. Zure fitxategiak '%s' pasahitza erabiliz enkriptatuko dira.\n\nWeb interfazea saioa hasi, 'oinarrizko enkripazio modulua' atalera joan zaitez eta pasahitza eguneratu. Hortarako pasahitz zaharra 'pasahitz zaharra' atalean sartu eta zure oraingo pasahitza",
+ "Default encryption module" : "Defektuzko enkriptazio modulua",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio app-a gaituta dago baina zure gakoak ez dira hasieratu, mesedez saiotik irteneta berriz sar zaitez",
+ "Encrypt the home storage" : "Etxe-biltegia enkriptatu",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aukera hau gaituz gero biltegi orokorreko fitxategi guztiak enkriptatuko dirabestela kanpo biltegian daudenak bakarrik enkriptatuko dira",
+ "Enable recovery key" : "Berreskuratze gakoa gaitu",
+ "Disable recovery key" : "Berreskuratze gakoa desgaitu",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Berreskuratze gakoa fitxategiak enkriptatzeko gako extra bat da.Erabiltzailearen fitxategiak berreskuratzea baimentzen du bere pasahitzagalduz gero.",
"Recovery key password" : "Berreskuratze gako pasahitza",
+ "Repeat recovery key password" : "Berreskuratze gakoaren pasahitza errepikatu",
"Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:",
+ "Old recovery key password" : "Berreskuratze gako zaharraren pasahitza",
+ "New recovery key password" : "Berreskuratze gako berriaren pasahitza",
+ "Repeat new recovery key password" : "Berreskuratze gakoaren pasahitz berria errepikatu",
"Change Password" : "Aldatu Pasahitza",
+ "Basic encryption module" : "Oinarrizko enkriptazio modulua",
"Your private key password no longer matches your log-in password." : "Zure gako pasahitza pribatua ez da dagoeneko bat etortzen zure sartzeko pasahitzarekin.",
"Set your old private key password to your current log-in password:" : "Ezarri zure gako pasahitz zaharra orain duzun sartzeko pasahitzan:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Ez baduzu zure pasahitz zaharra gogoratzen eskatu zure administratzaileari zure fitxategiak berreskuratzeko.",
@@ -32,6 +57,7 @@
"Enable password recovery:" : "Gaitu pasahitzaren berreskuratzea:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aukera hau gaituz zure enkriptatutako fitxategiak berreskuratu ahal izango dituzu pasahitza galtzekotan",
"Enabled" : "Gaitua",
- "Disabled" : "Ez-gaitua"
+ "Disabled" : "Ez-gaitua",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/composer/autoload.php b/apps/federatedfilesharing/composer/autoload.php
new file mode 100644
index 00000000000..5273607f74a
--- /dev/null
+++ b/apps/federatedfilesharing/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFederatedFileSharing::getLoader();
diff --git a/apps/federatedfilesharing/composer/composer.json b/apps/federatedfilesharing/composer/composer.json
new file mode 100644
index 00000000000..3cb32db12f2
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "FederatedFileSharing"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\FederatedFileSharing\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/federatedfilesharing/composer/composer/ClassLoader.php b/apps/federatedfilesharing/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/federatedfilesharing/composer/composer/LICENSE b/apps/federatedfilesharing/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/federatedfilesharing/composer/composer/autoload_classmap.php b/apps/federatedfilesharing/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..387ea8bee3a
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_classmap.php
@@ -0,0 +1,21 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\FederatedFileSharing\\AddressHandler' => $baseDir . '/../lib/AddressHandler.php',
+ 'OCA\\FederatedFileSharing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\FederatedFileSharing\\BackgroundJob\\RetryJob' => $baseDir . '/../lib/BackgroundJob/RetryJob.php',
+ 'OCA\\FederatedFileSharing\\Controller\\MountPublicLinkController' => $baseDir . '/../lib/Controller/MountPublicLinkController.php',
+ 'OCA\\FederatedFileSharing\\Controller\\RequestHandlerController' => $baseDir . '/../lib/Controller/RequestHandlerController.php',
+ 'OCA\\FederatedFileSharing\\FederatedShareProvider' => $baseDir . '/../lib/FederatedShareProvider.php',
+ 'OCA\\FederatedFileSharing\\Notifications' => $baseDir . '/../lib/Notifications.php',
+ 'OCA\\FederatedFileSharing\\Notifier' => $baseDir . '/../lib/Notifier.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+ 'OCA\\FederatedFileSharing\\Settings\\PersonalSection' => $baseDir . '/../lib/Settings/PersonalSection.php',
+ 'OCA\\FederatedFileSharing\\TokenHandler' => $baseDir . '/../lib/TokenHandler.php',
+);
diff --git a/apps/federatedfilesharing/composer/composer/autoload_namespaces.php b/apps/federatedfilesharing/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/federatedfilesharing/composer/composer/autoload_psr4.php b/apps/federatedfilesharing/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..7f2217448ff
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\FederatedFileSharing\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/federatedfilesharing/composer/composer/autoload_real.php b/apps/federatedfilesharing/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..bdc3ad006ae
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFederatedFileSharing
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFederatedFileSharing', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFederatedFileSharing', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFederatedFileSharing::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/federatedfilesharing/composer/composer/autoload_static.php b/apps/federatedfilesharing/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..95b8775384c
--- /dev/null
+++ b/apps/federatedfilesharing/composer/composer/autoload_static.php
@@ -0,0 +1,47 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFederatedFileSharing
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\FederatedFileSharing\\' => 25,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\FederatedFileSharing\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\FederatedFileSharing\\AddressHandler' => __DIR__ . '/..' . '/../lib/AddressHandler.php',
+ 'OCA\\FederatedFileSharing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\FederatedFileSharing\\BackgroundJob\\RetryJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/RetryJob.php',
+ 'OCA\\FederatedFileSharing\\Controller\\MountPublicLinkController' => __DIR__ . '/..' . '/../lib/Controller/MountPublicLinkController.php',
+ 'OCA\\FederatedFileSharing\\Controller\\RequestHandlerController' => __DIR__ . '/..' . '/../lib/Controller/RequestHandlerController.php',
+ 'OCA\\FederatedFileSharing\\FederatedShareProvider' => __DIR__ . '/..' . '/../lib/FederatedShareProvider.php',
+ 'OCA\\FederatedFileSharing\\Notifications' => __DIR__ . '/..' . '/../lib/Notifications.php',
+ 'OCA\\FederatedFileSharing\\Notifier' => __DIR__ . '/..' . '/../lib/Notifier.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\FederatedFileSharing\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ 'OCA\\FederatedFileSharing\\Settings\\PersonalSection' => __DIR__ . '/..' . '/../lib/Settings/PersonalSection.php',
+ 'OCA\\FederatedFileSharing\\TokenHandler' => __DIR__ . '/..' . '/../lib/TokenHandler.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFederatedFileSharing::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFederatedFileSharing::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFederatedFileSharing::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/federatedfilesharing/l10n/es_CR.js b/apps/federatedfilesharing/l10n/es_CR.js
new file mode 100644
index 00000000000..c4be26868c2
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_CR.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "federatedfilesharing",
+ {
+ "Federated sharing" : "Elementos compartidos",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea agregar el elemento compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Elemento compartido remoto",
+ "Remote share password" : "Contraseña del elemento compartido remoto",
+ "Cancel" : "Cancelar",
+ "Add remote share" : "Agregar elemento compartido remoto",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Invalid Federated Cloud ID" : "El ID es inválido",
+ "Server to server sharing is not enabled on this server" : "Compartir de servidor a servidor no está habilitado en este servidor",
+ "Couldn't establish a federated share." : "No fue posible establecer el elemento compartido. ",
+ "Couldn't establish a federated share, maybe the password was wrong." : "No fue posible establecer el elemento compartido federado, tal vez la contraseña sea incorrecta. ",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Solicitud de elemento compartido Federado enviada, recibiras una invitación. Verifica tus notificaciones.",
+ "The mountpoint name contains invalid characters." : "El nombre del punto de montaje contiene caracteres inválidos.",
+ "Not allowed to create a federated share with the owner." : "No está permitido crear un elemento compartido federado con el dueño. ",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no de confianza",
+ "Could not authenticate to remote share, password might be wrong" : "No fue posible autenticarse ante el elemento compartido remoto, la contraseña puede estar incorrecta",
+ "Storage not valid" : "Almacenamiento inválido",
+ "Federated share added" : "Elemento compartido Federado agregado",
+ "Couldn't add remote share" : "No fue posible agregar el elemento compartido remoto",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya se encuentra compartido con %s",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elelmento compartido federado con el mismo usuario",
+ "File is already shared with %s" : "El archivo ya ha sido compartido con %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor no está alcanzable o usa un certificado auto-firmado.",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s (de parte de %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Has recibido {share} como un elemento compartido remoto de {user} (de parte de {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s",
+ "You received {share} as a remote share from {user}" : "Recibiste {share} como un elemento compartido remoto de {user}",
+ "Accept" : "Aceptar",
+ "Decline" : "Rechazar",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud",
+ "Sharing" : "Compartiendo",
+ "Federated Cloud Sharing" : "Compartiendo en la Nube Federada",
+ "Open documentation" : "Abrir documentación",
+ "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ",
+ "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitirle alos usuarios de este servidor recibir elementos compartidos de otros servidores",
+ "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas",
+ "Allow users to publish their data to a global and public address book" : "Permitirle a los usuarios publicar sus datos a una libreta de direcciones global y pública",
+ "Federated Cloud" : "Nube Federada",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puedes compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingresa tu ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Tu ID de Nube Federada:",
+ "Share it so your friends can share files with you:" : "Compártelo para que tus amigos puedan compartir archivos contigo:",
+ "Add to your website" : "Agregar a tu sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos",
+ "Share it:" : "Compartirlo:"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/es_CR.json b/apps/federatedfilesharing/l10n/es_CR.json
new file mode 100644
index 00000000000..29ee41a77e4
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_CR.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Federated sharing" : "Elementos compartidos",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea agregar el elemento compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Elemento compartido remoto",
+ "Remote share password" : "Contraseña del elemento compartido remoto",
+ "Cancel" : "Cancelar",
+ "Add remote share" : "Agregar elemento compartido remoto",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Invalid Federated Cloud ID" : "El ID es inválido",
+ "Server to server sharing is not enabled on this server" : "Compartir de servidor a servidor no está habilitado en este servidor",
+ "Couldn't establish a federated share." : "No fue posible establecer el elemento compartido. ",
+ "Couldn't establish a federated share, maybe the password was wrong." : "No fue posible establecer el elemento compartido federado, tal vez la contraseña sea incorrecta. ",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Solicitud de elemento compartido Federado enviada, recibiras una invitación. Verifica tus notificaciones.",
+ "The mountpoint name contains invalid characters." : "El nombre del punto de montaje contiene caracteres inválidos.",
+ "Not allowed to create a federated share with the owner." : "No está permitido crear un elemento compartido federado con el dueño. ",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no de confianza",
+ "Could not authenticate to remote share, password might be wrong" : "No fue posible autenticarse ante el elemento compartido remoto, la contraseña puede estar incorrecta",
+ "Storage not valid" : "Almacenamiento inválido",
+ "Federated share added" : "Elemento compartido Federado agregado",
+ "Couldn't add remote share" : "No fue posible agregar el elemento compartido remoto",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya se encuentra compartido con %s",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elelmento compartido federado con el mismo usuario",
+ "File is already shared with %s" : "El archivo ya ha sido compartido con %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor no está alcanzable o usa un certificado auto-firmado.",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s (de parte de %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Has recibido {share} como un elemento compartido remoto de {user} (de parte de {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s",
+ "You received {share} as a remote share from {user}" : "Recibiste {share} como un elemento compartido remoto de {user}",
+ "Accept" : "Aceptar",
+ "Decline" : "Rechazar",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud",
+ "Sharing" : "Compartiendo",
+ "Federated Cloud Sharing" : "Compartiendo en la Nube Federada",
+ "Open documentation" : "Abrir documentación",
+ "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ",
+ "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitirle alos usuarios de este servidor recibir elementos compartidos de otros servidores",
+ "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas",
+ "Allow users to publish their data to a global and public address book" : "Permitirle a los usuarios publicar sus datos a una libreta de direcciones global y pública",
+ "Federated Cloud" : "Nube Federada",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puedes compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingresa tu ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Tu ID de Nube Federada:",
+ "Share it so your friends can share files with you:" : "Compártelo para que tus amigos puedan compartir archivos contigo:",
+ "Add to your website" : "Agregar a tu sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos",
+ "Share it:" : "Compartirlo:"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/es_DO.js b/apps/federatedfilesharing/l10n/es_DO.js
new file mode 100644
index 00000000000..c4be26868c2
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_DO.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "federatedfilesharing",
+ {
+ "Federated sharing" : "Elementos compartidos",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea agregar el elemento compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Elemento compartido remoto",
+ "Remote share password" : "Contraseña del elemento compartido remoto",
+ "Cancel" : "Cancelar",
+ "Add remote share" : "Agregar elemento compartido remoto",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Invalid Federated Cloud ID" : "El ID es inválido",
+ "Server to server sharing is not enabled on this server" : "Compartir de servidor a servidor no está habilitado en este servidor",
+ "Couldn't establish a federated share." : "No fue posible establecer el elemento compartido. ",
+ "Couldn't establish a federated share, maybe the password was wrong." : "No fue posible establecer el elemento compartido federado, tal vez la contraseña sea incorrecta. ",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Solicitud de elemento compartido Federado enviada, recibiras una invitación. Verifica tus notificaciones.",
+ "The mountpoint name contains invalid characters." : "El nombre del punto de montaje contiene caracteres inválidos.",
+ "Not allowed to create a federated share with the owner." : "No está permitido crear un elemento compartido federado con el dueño. ",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no de confianza",
+ "Could not authenticate to remote share, password might be wrong" : "No fue posible autenticarse ante el elemento compartido remoto, la contraseña puede estar incorrecta",
+ "Storage not valid" : "Almacenamiento inválido",
+ "Federated share added" : "Elemento compartido Federado agregado",
+ "Couldn't add remote share" : "No fue posible agregar el elemento compartido remoto",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya se encuentra compartido con %s",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elelmento compartido federado con el mismo usuario",
+ "File is already shared with %s" : "El archivo ya ha sido compartido con %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor no está alcanzable o usa un certificado auto-firmado.",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s (de parte de %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Has recibido {share} como un elemento compartido remoto de {user} (de parte de {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s",
+ "You received {share} as a remote share from {user}" : "Recibiste {share} como un elemento compartido remoto de {user}",
+ "Accept" : "Aceptar",
+ "Decline" : "Rechazar",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud",
+ "Sharing" : "Compartiendo",
+ "Federated Cloud Sharing" : "Compartiendo en la Nube Federada",
+ "Open documentation" : "Abrir documentación",
+ "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ",
+ "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitirle alos usuarios de este servidor recibir elementos compartidos de otros servidores",
+ "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas",
+ "Allow users to publish their data to a global and public address book" : "Permitirle a los usuarios publicar sus datos a una libreta de direcciones global y pública",
+ "Federated Cloud" : "Nube Federada",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puedes compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingresa tu ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Tu ID de Nube Federada:",
+ "Share it so your friends can share files with you:" : "Compártelo para que tus amigos puedan compartir archivos contigo:",
+ "Add to your website" : "Agregar a tu sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos",
+ "Share it:" : "Compartirlo:"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/es_DO.json b/apps/federatedfilesharing/l10n/es_DO.json
new file mode 100644
index 00000000000..29ee41a77e4
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/es_DO.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Federated sharing" : "Elementos compartidos",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea agregar el elemento compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Elemento compartido remoto",
+ "Remote share password" : "Contraseña del elemento compartido remoto",
+ "Cancel" : "Cancelar",
+ "Add remote share" : "Agregar elemento compartido remoto",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Invalid Federated Cloud ID" : "El ID es inválido",
+ "Server to server sharing is not enabled on this server" : "Compartir de servidor a servidor no está habilitado en este servidor",
+ "Couldn't establish a federated share." : "No fue posible establecer el elemento compartido. ",
+ "Couldn't establish a federated share, maybe the password was wrong." : "No fue posible establecer el elemento compartido federado, tal vez la contraseña sea incorrecta. ",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Solicitud de elemento compartido Federado enviada, recibiras una invitación. Verifica tus notificaciones.",
+ "The mountpoint name contains invalid characters." : "El nombre del punto de montaje contiene caracteres inválidos.",
+ "Not allowed to create a federated share with the owner." : "No está permitido crear un elemento compartido federado con el dueño. ",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no de confianza",
+ "Could not authenticate to remote share, password might be wrong" : "No fue posible autenticarse ante el elemento compartido remoto, la contraseña puede estar incorrecta",
+ "Storage not valid" : "Almacenamiento inválido",
+ "Federated share added" : "Elemento compartido Federado agregado",
+ "Couldn't add remote share" : "No fue posible agregar el elemento compartido remoto",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya se encuentra compartido con %s",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elelmento compartido federado con el mismo usuario",
+ "File is already shared with %s" : "El archivo ya ha sido compartido con %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor no está alcanzable o usa un certificado auto-firmado.",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s (de parte de %2$s)",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Has recibido {share} como un elemento compartido remoto de {user} (de parte de {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Has recibido \"%3$s\" como un elemento compartido remoto de %1$s",
+ "You received {share} as a remote share from {user}" : "Recibiste {share} como un elemento compartido remoto de {user}",
+ "Accept" : "Aceptar",
+ "Decline" : "Rechazar",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud, ver %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud",
+ "Sharing" : "Compartiendo",
+ "Federated Cloud Sharing" : "Compartiendo en la Nube Federada",
+ "Open documentation" : "Abrir documentación",
+ "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ",
+ "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitirle alos usuarios de este servidor recibir elementos compartidos de otros servidores",
+ "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas",
+ "Allow users to publish their data to a global and public address book" : "Permitirle a los usuarios publicar sus datos a una libreta de direcciones global y pública",
+ "Federated Cloud" : "Nube Federada",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puedes compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingresa tu ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Tu ID de Nube Federada:",
+ "Share it so your friends can share files with you:" : "Compártelo para que tus amigos puedan compartir archivos contigo:",
+ "Add to your website" : "Agregar a tu sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:",
+ "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos",
+ "Share it:" : "Compartirlo:"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/sk.js b/apps/federatedfilesharing/l10n/sk.js
new file mode 100644
index 00000000000..7877da712e8
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/sk.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "federatedfilesharing",
+ {
+ "Federated sharing" : "Združené sprístupňovanie",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
+ "Remote share" : "Vzdialené úložisko",
+ "Remote share password" : "Heslo k vzdialenému úložisku",
+ "Cancel" : "Zrušiť",
+ "Add remote share" : "Pridať vzdialené úložisko",
+ "Copy" : "Kopírovať",
+ "Copied!" : "Skopírované!",
+ "Not supported!" : "Nie je podporované!",
+ "Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
+ "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
+ "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
+ "Server to server sharing is not enabled on this server" : "Sprístupňovanie server-server nie je na tomto serveri povolené",
+ "Couldn't establish a federated share." : "Nepodarilo sa nadviazať združené zdieľanie",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Nepodarilo sa nadviazať združené zdieľanie, možno je nesprávne heslo.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Požiadavka na združené zdieľanie bola odoslaná, obdržíte pozvánku. Skontrolujte oznámenia.",
+ "The mountpoint name contains invalid characters." : "Meno prípojného bodu obsahuje neplatné znaky.",
+ "Not allowed to create a federated share with the owner." : "Nie je povolené vytvárať združené zdieľanie s vlastníkom.",
+ "Invalid or untrusted SSL certificate" : "Neplatný alebo nedôveryhodný certifikát SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie je možné overiť vo vzdialenom úložisku, heslo môže byť nesprávne",
+ "Storage not valid" : "Neplatné úložisko",
+ "Federated share added" : "Združené sprístupnenie pridané",
+ "Couldn't add remote share" : "Nedá sa pridať vzdialené sprístupnenie",
+ "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
+ "File is already shared with %s" : "Súbor je už sprístupnený používateľovi %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Zdieľanie %s zlyhalo, %s sa nepodarilo nájsť, server nie je pravdepodobne dostupný alebo používa vlastnoručne podpísaný certifikát.",
+ "Could not find share" : "Nebolo možné nájsť sprístupnenie",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s (v mene %2$s) ",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Obdržali ste {share} ako vzdialené zdieľanie od {user} (v mene {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s",
+ "You received {share} as a remote share from {user}" : "Obdržali ste {share} ako vzdialené zdieľanie od {user}",
+ "Accept" : "Schváliť",
+ "Decline" : "Odmietnuť",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID, viac na %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID",
+ "Sharing" : "Sprístupnenie",
+ "Federated Cloud Sharing" : "Sprístupnenie prostredníctvom Federated Cloud",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Adjust how people can share between servers." : "Nastavte ako môžu ľudia medzi sebou zdieľať servery.",
+ "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohto servera sprístupňovať obsah na iných serveroch",
+ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohto servera sprístupňovanie obsahu z iných serverov",
+ "Search global and public address book for users" : "Vyhľadávať používateľov v globálnom a verejnom adresári kontaktov",
+ "Allow users to publish their data to a global and public address book" : "Povoliť používateľom publikovanie ich dát do globálneho a verejného adresára",
+ "Federated Cloud" : "Združený Cloud",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Môžete zdieľať s kýmkoľvek kto používa Nextcloud, ownCloud alebo Pydio! Len zadajte ich združené Cloud ID v dialógu pre zdieľanie. Vyzerá podobne ako person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Vaše združené Cloud ID",
+ "Share it so your friends can share files with you:" : "Zdieľajte to, aby mohli vaši priatelia zdieľať súbory s vami:",
+ "Add to your website" : "Pridať na svoju webstránku",
+ "Share with me via Nextcloud" : "Sprístupnené cez Nextcloud",
+ "HTML Code:" : "HTML kód:",
+ "Search global and public address book for users and let local users publish their data" : "Vyhľadávať používateľog v globálnom a verejnom adresári a umožniť miestnym používateľom publikovať ich dáta",
+ "Share it:" : "Sprístupniť:"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/federatedfilesharing/l10n/sk.json b/apps/federatedfilesharing/l10n/sk.json
new file mode 100644
index 00000000000..9d94d89eb5e
--- /dev/null
+++ b/apps/federatedfilesharing/l10n/sk.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Federated sharing" : "Združené sprístupňovanie",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
+ "Remote share" : "Vzdialené úložisko",
+ "Remote share password" : "Heslo k vzdialenému úložisku",
+ "Cancel" : "Zrušiť",
+ "Add remote share" : "Pridať vzdialené úložisko",
+ "Copy" : "Kopírovať",
+ "Copied!" : "Skopírované!",
+ "Not supported!" : "Nie je podporované!",
+ "Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
+ "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
+ "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID",
+ "Server to server sharing is not enabled on this server" : "Sprístupňovanie server-server nie je na tomto serveri povolené",
+ "Couldn't establish a federated share." : "Nepodarilo sa nadviazať združené zdieľanie",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Nepodarilo sa nadviazať združené zdieľanie, možno je nesprávne heslo.",
+ "Federated Share request sent, you will receive an invitation. Check your notifications." : "Požiadavka na združené zdieľanie bola odoslaná, obdržíte pozvánku. Skontrolujte oznámenia.",
+ "The mountpoint name contains invalid characters." : "Meno prípojného bodu obsahuje neplatné znaky.",
+ "Not allowed to create a federated share with the owner." : "Nie je povolené vytvárať združené zdieľanie s vlastníkom.",
+ "Invalid or untrusted SSL certificate" : "Neplatný alebo nedôveryhodný certifikát SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie je možné overiť vo vzdialenom úložisku, heslo môže byť nesprávne",
+ "Storage not valid" : "Neplatné úložisko",
+ "Federated share added" : "Združené sprístupnenie pridané",
+ "Couldn't add remote share" : "Nedá sa pridať vzdialené sprístupnenie",
+ "Sharing %s failed, because this item is already shared with %s" : "Sprístupnenie %s zlyhalo, pretože táto položka už je prístupná pre %s",
+ "Not allowed to create a federated share with the same user" : "Nie je možné vytvoriť združené sprístupnenie so sebou samým",
+ "File is already shared with %s" : "Súbor je už sprístupnený používateľovi %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Zdieľanie %s zlyhalo, %s sa nepodarilo nájsť, server nie je pravdepodobne dostupný alebo používa vlastnoručne podpísaný certifikát.",
+ "Could not find share" : "Nebolo možné nájsť sprístupnenie",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s (v mene %2$s) ",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Obdržali ste {share} ako vzdialené zdieľanie od {user} (v mene {behalf})",
+ "You received \"%3$s\" as a remote share from %1$s" : "Obdržali ste \"%3$s\" ako vzdialené zdieľanie od %1$s",
+ "You received {share} as a remote share from {user}" : "Obdržali ste {share} ako vzdialené zdieľanie od {user}",
+ "Accept" : "Schváliť",
+ "Decline" : "Odmietnuť",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID, viac na %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Sprístupnite mi obsah prostredníctvom môjho #Nextcloud Federated Cloud ID",
+ "Sharing" : "Sprístupnenie",
+ "Federated Cloud Sharing" : "Sprístupnenie prostredníctvom Federated Cloud",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Adjust how people can share between servers." : "Nastavte ako môžu ľudia medzi sebou zdieľať servery.",
+ "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohto servera sprístupňovať obsah na iných serveroch",
+ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohto servera sprístupňovanie obsahu z iných serverov",
+ "Search global and public address book for users" : "Vyhľadávať používateľov v globálnom a verejnom adresári kontaktov",
+ "Allow users to publish their data to a global and public address book" : "Povoliť používateľom publikovanie ich dát do globálneho a verejného adresára",
+ "Federated Cloud" : "Združený Cloud",
+ "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Môžete zdieľať s kýmkoľvek kto používa Nextcloud, ownCloud alebo Pydio! Len zadajte ich združené Cloud ID v dialógu pre zdieľanie. Vyzerá podobne ako person@cloud.example.com",
+ "Your Federated Cloud ID:" : "Vaše združené Cloud ID",
+ "Share it so your friends can share files with you:" : "Zdieľajte to, aby mohli vaši priatelia zdieľať súbory s vami:",
+ "Add to your website" : "Pridať na svoju webstránku",
+ "Share with me via Nextcloud" : "Sprístupnené cez Nextcloud",
+ "HTML Code:" : "HTML kód:",
+ "Search global and public address book for users and let local users publish their data" : "Vyhľadávať používateľog v globálnom a verejnom adresári a umožniť miestnym používateľom publikovať ich dáta",
+ "Share it:" : "Sprístupniť:"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/federation/composer/autoload.php b/apps/federation/composer/autoload.php
new file mode 100644
index 00000000000..45677794dd0
--- /dev/null
+++ b/apps/federation/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFederation::getLoader();
diff --git a/apps/federation/composer/composer.json b/apps/federation/composer/composer.json
new file mode 100644
index 00000000000..2c9a66b242c
--- /dev/null
+++ b/apps/federation/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Federation"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Federation\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/federation/composer/composer/ClassLoader.php b/apps/federation/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/federation/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/federation/composer/composer/LICENSE b/apps/federation/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/federation/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/federation/composer/composer/autoload_classmap.php b/apps/federation/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..8274bf45240
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_classmap.php
@@ -0,0 +1,23 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Federation\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Federation\\BackgroundJob\\GetSharedSecret' => $baseDir . '/../lib/BackgroundJob/GetSharedSecret.php',
+ 'OCA\\Federation\\BackgroundJob\\RequestSharedSecret' => $baseDir . '/../lib/BackgroundJob/RequestSharedSecret.php',
+ 'OCA\\Federation\\Command\\SyncFederationAddressBooks' => $baseDir . '/../lib/Command/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\Controller\\OCSAuthAPIController' => $baseDir . '/../lib/Controller/OCSAuthAPIController.php',
+ 'OCA\\Federation\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Federation\\DAV\\FedAuth' => $baseDir . '/../lib/DAV/FedAuth.php',
+ 'OCA\\Federation\\DbHandler' => $baseDir . '/../lib/DbHandler.php',
+ 'OCA\\Federation\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Federation\\Middleware\\AddServerMiddleware' => $baseDir . '/../lib/Middleware/AddServerMiddleware.php',
+ 'OCA\\Federation\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\Federation\\SyncFederationAddressBooks' => $baseDir . '/../lib/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\SyncJob' => $baseDir . '/../lib/SyncJob.php',
+ 'OCA\\Federation\\TrustedServers' => $baseDir . '/../lib/TrustedServers.php',
+);
diff --git a/apps/federation/composer/composer/autoload_namespaces.php b/apps/federation/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/federation/composer/composer/autoload_psr4.php b/apps/federation/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..d815aedf125
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Federation\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/federation/composer/composer/autoload_real.php b/apps/federation/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..f2906437fdb
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFederation
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFederation', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFederation', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFederation::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/federation/composer/composer/autoload_static.php b/apps/federation/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..e005986b9f9
--- /dev/null
+++ b/apps/federation/composer/composer/autoload_static.php
@@ -0,0 +1,49 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFederation
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Federation\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Federation\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Federation\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Federation\\BackgroundJob\\GetSharedSecret' => __DIR__ . '/..' . '/../lib/BackgroundJob/GetSharedSecret.php',
+ 'OCA\\Federation\\BackgroundJob\\RequestSharedSecret' => __DIR__ . '/..' . '/../lib/BackgroundJob/RequestSharedSecret.php',
+ 'OCA\\Federation\\Command\\SyncFederationAddressBooks' => __DIR__ . '/..' . '/../lib/Command/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\Controller\\OCSAuthAPIController' => __DIR__ . '/..' . '/../lib/Controller/OCSAuthAPIController.php',
+ 'OCA\\Federation\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Federation\\DAV\\FedAuth' => __DIR__ . '/..' . '/../lib/DAV/FedAuth.php',
+ 'OCA\\Federation\\DbHandler' => __DIR__ . '/..' . '/../lib/DbHandler.php',
+ 'OCA\\Federation\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Federation\\Middleware\\AddServerMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/AddServerMiddleware.php',
+ 'OCA\\Federation\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\Federation\\SyncFederationAddressBooks' => __DIR__ . '/..' . '/../lib/SyncFederationAddressBooks.php',
+ 'OCA\\Federation\\SyncJob' => __DIR__ . '/..' . '/../lib/SyncJob.php',
+ 'OCA\\Federation\\TrustedServers' => __DIR__ . '/..' . '/../lib/TrustedServers.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFederation::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFederation::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFederation::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/federation/l10n/es_CR.js b/apps/federation/l10n/es_CR.js
new file mode 100644
index 00000000000..f67269dab94
--- /dev/null
+++ b/apps/federation/l10n/es_CR.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
+ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
+ "No server to federate with found" : "No se encontraron servidores para integrar a la federación",
+ "Could not add server" : "No fue posible agregar el servidor",
+ "Trusted servers" : "Servidores de confianza",
+ "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." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
+ "+ Add trusted server" : "+ Agregar servidor de confianza",
+ "Trusted server" : "Servidor de confianza",
+ "Add" : "Agregar",
+ "Federation" : "Federación"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/es_CR.json b/apps/federation/l10n/es_CR.json
new file mode 100644
index 00000000000..4e87e62726f
--- /dev/null
+++ b/apps/federation/l10n/es_CR.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
+ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
+ "No server to federate with found" : "No se encontraron servidores para integrar a la federación",
+ "Could not add server" : "No fue posible agregar el servidor",
+ "Trusted servers" : "Servidores de confianza",
+ "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." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
+ "+ Add trusted server" : "+ Agregar servidor de confianza",
+ "Trusted server" : "Servidor de confianza",
+ "Add" : "Agregar",
+ "Federation" : "Federación"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federation/l10n/es_DO.js b/apps/federation/l10n/es_DO.js
new file mode 100644
index 00000000000..f67269dab94
--- /dev/null
+++ b/apps/federation/l10n/es_DO.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
+ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
+ "No server to federate with found" : "No se encontraron servidores para integrar a la federación",
+ "Could not add server" : "No fue posible agregar el servidor",
+ "Trusted servers" : "Servidores de confianza",
+ "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." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
+ "+ Add trusted server" : "+ Agregar servidor de confianza",
+ "Trusted server" : "Servidor de confianza",
+ "Add" : "Agregar",
+ "Federation" : "Federación"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/es_DO.json b/apps/federation/l10n/es_DO.json
new file mode 100644
index 00000000000..4e87e62726f
--- /dev/null
+++ b/apps/federation/l10n/es_DO.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
+ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
+ "No server to federate with found" : "No se encontraron servidores para integrar a la federación",
+ "Could not add server" : "No fue posible agregar el servidor",
+ "Trusted servers" : "Servidores de confianza",
+ "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." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
+ "+ Add trusted server" : "+ Agregar servidor de confianza",
+ "Trusted server" : "Servidor de confianza",
+ "Add" : "Agregar",
+ "Federation" : "Federación"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federation/l10n/eu.js b/apps/federation/l10n/eu.js
new file mode 100644
index 00000000000..d64821f858f
--- /dev/null
+++ b/apps/federation/l10n/eu.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Zerbitzari fidagarrien zerrendara gehituta",
+ "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago iada",
+ "No server to federate with found" : "Ez da federatzeko zerbitzaririk topatu",
+ "Could not add server" : "Ezin da zerbitzaria gehitu",
+ "Trusted servers" : "Zerbitzari fidagarriak",
+ "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." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaileen informazioa elkartrukatzeko aukeraematen du. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federazio partekatuarentzako",
+ "Add server automatically once a federated share was created successfully" : "Zerbitzaria automatikoki gehitu federatutako partekatze bat ondo sortzen denean",
+ "+ Add trusted server" : "+ Zerbitzari fidagarria gehitu",
+ "Trusted server" : "Zerbitzari fidagarria",
+ "Add" : "Gehitu",
+ "Federation" : "Federazioa"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/eu.json b/apps/federation/l10n/eu.json
new file mode 100644
index 00000000000..86bdba1dc9d
--- /dev/null
+++ b/apps/federation/l10n/eu.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Zerbitzari fidagarrien zerrendara gehituta",
+ "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago iada",
+ "No server to federate with found" : "Ez da federatzeko zerbitzaririk topatu",
+ "Could not add server" : "Ezin da zerbitzaria gehitu",
+ "Trusted servers" : "Zerbitzari fidagarriak",
+ "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." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaileen informazioa elkartrukatzeko aukeraematen du. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federazio partekatuarentzako",
+ "Add server automatically once a federated share was created successfully" : "Zerbitzaria automatikoki gehitu federatutako partekatze bat ondo sortzen denean",
+ "+ Add trusted server" : "+ Zerbitzari fidagarria gehitu",
+ "Trusted server" : "Zerbitzari fidagarria",
+ "Add" : "Gehitu",
+ "Federation" : "Federazioa"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/federation/l10n/sk.js b/apps/federation/l10n/sk.js
new file mode 100644
index 00000000000..ebf28b6fa34
--- /dev/null
+++ b/apps/federation/l10n/sk.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "federation",
+ {
+ "Added to the list of trusted servers" : "Pridané do zoznamu dôveryhodných serverov",
+ "Server is already in the list of trusted servers." : "Server sa už nachádza v zozname dôveryhodných serverov",
+ "No server to federate with found" : "Server pre združenie sa nenašiel",
+ "Could not add server" : "Nebolo možné pridať server",
+ "Trusted servers" : "Dôveryhodné servery",
+ "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." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní.",
+ "Add server automatically once a federated share was created successfully" : "Pridať server automaticky akonáhle je úspešne vytvorené združené zdieľanie",
+ "+ Add trusted server" : "Pridať dôveryhodný server",
+ "Trusted server" : "Dôveryhodný server",
+ "Add" : "Pridať",
+ "Federation" : "Združovanie"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/federation/l10n/sk.json b/apps/federation/l10n/sk.json
new file mode 100644
index 00000000000..119f2b121fa
--- /dev/null
+++ b/apps/federation/l10n/sk.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Added to the list of trusted servers" : "Pridané do zoznamu dôveryhodných serverov",
+ "Server is already in the list of trusted servers." : "Server sa už nachádza v zozname dôveryhodných serverov",
+ "No server to federate with found" : "Server pre združenie sa nenašiel",
+ "Could not add server" : "Nebolo možné pridať server",
+ "Trusted servers" : "Dôveryhodné servery",
+ "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." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní.",
+ "Add server automatically once a federated share was created successfully" : "Pridať server automaticky akonáhle je úspešne vytvorené združené zdieľanie",
+ "+ Add trusted server" : "Pridať dôveryhodný server",
+ "Trusted server" : "Dôveryhodný server",
+ "Add" : "Pridať",
+ "Federation" : "Združovanie"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/files/composer/autoload.php b/apps/files/composer/autoload.php
new file mode 100644
index 00000000000..3aa13fa515d
--- /dev/null
+++ b/apps/files/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles::getLoader();
diff --git a/apps/files/composer/composer.json b/apps/files/composer/composer.json
new file mode 100644
index 00000000000..3412d9507b2
--- /dev/null
+++ b/apps/files/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files/composer/composer/ClassLoader.php b/apps/files/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files/composer/composer/LICENSE b/apps/files/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..d184702cfa2
--- /dev/null
+++ b/apps/files/composer/composer/autoload_classmap.php
@@ -0,0 +1,36 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files\\Activity\\FavoriteProvider' => $baseDir . '/../lib/Activity/FavoriteProvider.php',
+ 'OCA\\Files\\Activity\\Filter\\Favorites' => $baseDir . '/../lib/Activity/Filter/Favorites.php',
+ 'OCA\\Files\\Activity\\Filter\\FileChanges' => $baseDir . '/../lib/Activity/Filter/FileChanges.php',
+ 'OCA\\Files\\Activity\\Helper' => $baseDir . '/../lib/Activity/Helper.php',
+ 'OCA\\Files\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\Files\\Activity\\Settings\\FavoriteAction' => $baseDir . '/../lib/Activity/Settings/FavoriteAction.php',
+ 'OCA\\Files\\Activity\\Settings\\FileChanged' => $baseDir . '/../lib/Activity/Settings/FileChanged.php',
+ 'OCA\\Files\\Activity\\Settings\\FileCreated' => $baseDir . '/../lib/Activity/Settings/FileCreated.php',
+ 'OCA\\Files\\Activity\\Settings\\FileDeleted' => $baseDir . '/../lib/Activity/Settings/FileDeleted.php',
+ 'OCA\\Files\\Activity\\Settings\\FileFavorite' => $baseDir . '/../lib/Activity/Settings/FileFavorite.php',
+ 'OCA\\Files\\Activity\\Settings\\FileRestored' => $baseDir . '/../lib/Activity/Settings/FileRestored.php',
+ 'OCA\\Files\\App' => $baseDir . '/../lib/App.php',
+ 'OCA\\Files\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files\\BackgroundJob\\CleanupFileLocks' => $baseDir . '/../lib/BackgroundJob/CleanupFileLocks.php',
+ 'OCA\\Files\\BackgroundJob\\DeleteOrphanedItems' => $baseDir . '/../lib/BackgroundJob/DeleteOrphanedItems.php',
+ 'OCA\\Files\\BackgroundJob\\ScanFiles' => $baseDir . '/../lib/BackgroundJob/ScanFiles.php',
+ 'OCA\\Files\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files\\Command\\DeleteOrphanedFiles' => $baseDir . '/../lib/Command/DeleteOrphanedFiles.php',
+ 'OCA\\Files\\Command\\Scan' => $baseDir . '/../lib/Command/Scan.php',
+ 'OCA\\Files\\Command\\ScanAppData' => $baseDir . '/../lib/Command/ScanAppData.php',
+ 'OCA\\Files\\Command\\TransferOwnership' => $baseDir . '/../lib/Command/TransferOwnership.php',
+ 'OCA\\Files\\Controller\\ApiController' => $baseDir . '/../lib/Controller/ApiController.php',
+ 'OCA\\Files\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Files\\Controller\\ViewController' => $baseDir . '/../lib/Controller/ViewController.php',
+ 'OCA\\Files\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\Files\\Service\\TagService' => $baseDir . '/../lib/Service/TagService.php',
+ 'OCA\\Files\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+);
diff --git a/apps/files/composer/composer/autoload_namespaces.php b/apps/files/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files/composer/composer/autoload_psr4.php b/apps/files/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..c4f95a2b150
--- /dev/null
+++ b/apps/files/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files/composer/composer/autoload_real.php b/apps/files/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..fe9ef0b02ae
--- /dev/null
+++ b/apps/files/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..44094c6a34c
--- /dev/null
+++ b/apps/files/composer/composer/autoload_static.php
@@ -0,0 +1,62 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files\\' => 10,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files\\Activity\\FavoriteProvider' => __DIR__ . '/..' . '/../lib/Activity/FavoriteProvider.php',
+ 'OCA\\Files\\Activity\\Filter\\Favorites' => __DIR__ . '/..' . '/../lib/Activity/Filter/Favorites.php',
+ 'OCA\\Files\\Activity\\Filter\\FileChanges' => __DIR__ . '/..' . '/../lib/Activity/Filter/FileChanges.php',
+ 'OCA\\Files\\Activity\\Helper' => __DIR__ . '/..' . '/../lib/Activity/Helper.php',
+ 'OCA\\Files\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\Files\\Activity\\Settings\\FavoriteAction' => __DIR__ . '/..' . '/../lib/Activity/Settings/FavoriteAction.php',
+ 'OCA\\Files\\Activity\\Settings\\FileChanged' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileChanged.php',
+ 'OCA\\Files\\Activity\\Settings\\FileCreated' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileCreated.php',
+ 'OCA\\Files\\Activity\\Settings\\FileDeleted' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileDeleted.php',
+ 'OCA\\Files\\Activity\\Settings\\FileFavorite' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileFavorite.php',
+ 'OCA\\Files\\Activity\\Settings\\FileRestored' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileRestored.php',
+ 'OCA\\Files\\App' => __DIR__ . '/..' . '/../lib/App.php',
+ 'OCA\\Files\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files\\BackgroundJob\\CleanupFileLocks' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupFileLocks.php',
+ 'OCA\\Files\\BackgroundJob\\DeleteOrphanedItems' => __DIR__ . '/..' . '/../lib/BackgroundJob/DeleteOrphanedItems.php',
+ 'OCA\\Files\\BackgroundJob\\ScanFiles' => __DIR__ . '/..' . '/../lib/BackgroundJob/ScanFiles.php',
+ 'OCA\\Files\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files\\Command\\DeleteOrphanedFiles' => __DIR__ . '/..' . '/../lib/Command/DeleteOrphanedFiles.php',
+ 'OCA\\Files\\Command\\Scan' => __DIR__ . '/..' . '/../lib/Command/Scan.php',
+ 'OCA\\Files\\Command\\ScanAppData' => __DIR__ . '/..' . '/../lib/Command/ScanAppData.php',
+ 'OCA\\Files\\Command\\TransferOwnership' => __DIR__ . '/..' . '/../lib/Command/TransferOwnership.php',
+ 'OCA\\Files\\Controller\\ApiController' => __DIR__ . '/..' . '/../lib/Controller/ApiController.php',
+ 'OCA\\Files\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\Files\\Controller\\ViewController' => __DIR__ . '/..' . '/../lib/Controller/ViewController.php',
+ 'OCA\\Files\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\Files\\Service\\TagService' => __DIR__ . '/..' . '/../lib/Service/TagService.php',
+ 'OCA\\Files\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss
index c03b1ce6fad..c165063bb85 100644
--- a/apps/files/css/files.scss
+++ b/apps/files/css/files.scss
@@ -555,6 +555,10 @@ a.action > img {
#fileList a.action.action-share {
padding: 17px 14px;
}
+#fileList a.action.action-share .avatar {
+ display: inline-block;
+ vertical-align: middle;
+}
#fileList a.action.action-menu {
padding-top: 17px;
@@ -590,8 +594,12 @@ a.action > img {
max-width: 70px;
overflow: hidden;
text-overflow: ellipsis;
- vertical-align: bottom;
- padding-left: 6px;
+ vertical-align: middle;
+ margin-left: 6px;
+}
+
+#fileList .remoteAddress .userDomain {
+ margin-left: 0 !important;
}
#fileList .favorite-mark.permanent {
diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js
index 2286477750c..747a7245a56 100644
--- a/apps/files/js/tagsplugin.js
+++ b/apps/files/js/tagsplugin.js
@@ -103,17 +103,17 @@
return t('files', 'Add to favorites');
},
mime: 'all',
- order: -23,
+ order: -100,
permissions: OC.PERMISSION_READ,
iconClass: function(fileName, context) {
var $file = context.$file;
var isFavorite = $file.data('favorite') === true;
if (isFavorite) {
- return 'icon-starred';
+ return 'icon-star-dark';
}
- return 'icon-star';
+ return 'icon-starred';
},
actionHandler: function(fileName, context) {
var $favoriteMarkEl = context.$file.find('.favorite-mark');
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index e693f9aa766..89a1bdda6b9 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Not enough free space, you are uploading {size1} but only {size2} is left",
"Target folder \"{dir}\" does not exist any more" : "Target folder \"{dir}\" does not exist any more",
"Not enough free space" : "Not enough free space",
+ "Uploading …" : "Uploading …",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
"Actions" : "Actions",
@@ -76,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favourite",
"New folder" : "New folder",
"Upload file" : "Upload file",
+ "Not favorited" : "Not favourited",
+ "Remove from favorites" : "Remove from favourites",
+ "Add to favorites" : "Add to favourites",
"An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags",
"Added to favorites" : "Added to favourites",
"Removed from favorites" : "Removed from favourites",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index 83cee64ef46..f0c1aff46d3 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Not enough free space, you are uploading {size1} but only {size2} is left",
"Target folder \"{dir}\" does not exist any more" : "Target folder \"{dir}\" does not exist any more",
"Not enough free space" : "Not enough free space",
+ "Uploading …" : "Uploading …",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
"Actions" : "Actions",
@@ -74,6 +75,9 @@
"Favorite" : "Favourite",
"New folder" : "New folder",
"Upload file" : "Upload file",
+ "Not favorited" : "Not favourited",
+ "Remove from favorites" : "Remove from favourites",
+ "Add to favorites" : "Add to favourites",
"An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags",
"Added to favorites" : "Added to favourites",
"Removed from favorites" : "Removed from favourites",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 2025736c2be..40955586567 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hay suficiente espacio libre. Quiere subir {size1} pero solo quedan {size2}",
"Target folder \"{dir}\" does not exist any more" : "La carpeta de destino \"{dir}\" ya no existe",
"Not enough free space" : "No hay espacio libre suficiente",
+ "Uploading …" : "Subiendo...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -76,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorito",
"New folder" : "Nueva carpeta",
"Upload file" : "Subir archivo",
+ "Not favorited" : "No marcado como favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Añadir a favoritos",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"Added to favorites" : "Agregado a favoritos",
"Removed from favorites" : "Borrado de favoritos",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 71fac819e34..76ca1811364 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hay suficiente espacio libre. Quiere subir {size1} pero solo quedan {size2}",
"Target folder \"{dir}\" does not exist any more" : "La carpeta de destino \"{dir}\" ya no existe",
"Not enough free space" : "No hay espacio libre suficiente",
+ "Uploading …" : "Subiendo...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -74,6 +75,9 @@
"Favorite" : "Favorito",
"New folder" : "Nueva carpeta",
"Upload file" : "Subir archivo",
+ "Not favorited" : "No marcado como favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Añadir a favoritos",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"Added to favorites" : "Agregado a favoritos",
"Removed from favorites" : "Borrado de favoritos",
diff --git a/apps/files/l10n/es_CO.js b/apps/files/l10n/es_CO.js
index 4f242d15a7a..ce1f5db9667 100644
--- a/apps/files/l10n/es_CO.js
+++ b/apps/files/l10n/es_CO.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
"Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
"Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -76,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorito",
"New folder" : "Carpeta nueva",
"Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
"An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
"Added to favorites" : "Agregado a los favoritos",
"Removed from favorites" : "Eliminado de los favoritos",
diff --git a/apps/files/l10n/es_CO.json b/apps/files/l10n/es_CO.json
index 284e43b4ab6..cabba647c0e 100644
--- a/apps/files/l10n/es_CO.json
+++ b/apps/files/l10n/es_CO.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
"Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
"Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -74,6 +75,9 @@
"Favorite" : "Favorito",
"New folder" : "Carpeta nueva",
"Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
"An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
"Added to favorites" : "Agregado a los favoritos",
"Removed from favorites" : "Eliminado de los favoritos",
diff --git a/apps/files/l10n/es_CR.js b/apps/files/l10n/es_CR.js
new file mode 100644
index 00000000000..ce1f5db9667
--- /dev/null
+++ b/apps/files/l10n/es_CR.js
@@ -0,0 +1,164 @@
+OC.L10N.register(
+ "files",
+ {
+ "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
+ "Storage invalid" : "El almacenamiento es inválido",
+ "Unknown error" : "Se presentó un error desconocido",
+ "All files" : "Todos los archivos",
+ "Recent" : "Reciente",
+ "File could not be found" : "No fue posible encontrar el archivo",
+ "Home" : "Inicio",
+ "Close" : "Cerrar",
+ "Favorites" : "Favoritos",
+ "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
+ "Upload cancelled." : "Carga cancelada.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
+ "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
+ "Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
+ "Actions" : "Acciones",
+ "Download" : "Descargar",
+ "Rename" : "Renombrar",
+ "Move or copy" : "Mover o copiar",
+ "Target folder" : "Carpeta destino",
+ "Delete" : "Borrar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
+ "Details" : "Detalles",
+ "Select" : "Seleccionar",
+ "Pending" : "Pendiente",
+ "Unable to determine date" : "No fue posible determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
+ "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
+ "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
+ "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
+ "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
+ "{newName} already exists" : "{newName} ya existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
+ "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
+ "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
+ "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
+ "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}",
+ "Name" : "Nombre",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado",
+ "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
+ "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
+ "{dirs} and {files}" : "{dirs} y {files}",
+ "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
+ "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
+ "New" : "Nuevo",
+ "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
+ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
+ "View in folder" : "Ver en la carpeta",
+ "Copied!" : "¡Copiado!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
+ "Path" : "Ruta",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
+ "New folder" : "Carpeta nueva",
+ "Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
+ "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
+ "Added to favorites" : "Agregado a los favoritos",
+ "Removed from favorites" : "Eliminado de los favoritos",
+ "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
+ "File changes" : "Cambios al archivo",
+ "Created by {user}" : "Creado por {user}",
+ "Changed by {user}" : "Cambiado por {user}",
+ "Deleted by {user}" : "Borrado por {user}",
+ "Restored by {user}" : "Restaurado por {user}",
+ "Renamed by {user}" : "Renombrado por {user}",
+ "Moved by {user}" : "Movido por {user}",
+ "\"remote user\"" : "\"usuario remoto\"",
+ "You created {file}" : "Creaste {file}",
+ "{user} created {file}" : "{user} creó {file}",
+ "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
+ "You changed {file}" : "Cambiaste {file}",
+ "{user} changed {file}" : "{user} cambió {file}",
+ "You deleted {file}" : "Borraste {file}",
+ "{user} deleted {file}" : "{user} borró {file}",
+ "You restored {file}" : "Restauraste {file}",
+ "{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
+ "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
+ "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "Unlimited" : "Ilimitado",
+ "Upload (max. %s)" : "Cargar (max. %s)",
+ "File handling" : "Manejo de archivos",
+ "Maximum upload size" : "Tamaño máximo de carga",
+ "max. possible: " : "max. posible:",
+ "Save" : "Guardar",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
+ "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
+ "%s of %s used" : "%s de %s usado",
+ "%s used" : "%s usado",
+ "Settings" : "Configuraciones ",
+ "Show hidden files" : "Mostrar archivos ocultos",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
+ "Cancel upload" : "Cancelar carga",
+ "No files in here" : "No hay archivos aquí",
+ "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Upload too large" : "La carga es demasido grande",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
+ "No favorites yet" : "Aún no hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Archivos borrados",
+ "Text file" : "Archivo de texto",
+ "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
+ "Uploading..." : "Cargando...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momento...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Move" : "Mover",
+ "Copy local link" : "Copiar liga local",
+ "Folder" : "Carpeta",
+ "Upload" : "Cargar",
+ "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "No favorites" : "No hay favoritos"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_CR.json b/apps/files/l10n/es_CR.json
new file mode 100644
index 00000000000..cabba647c0e
--- /dev/null
+++ b/apps/files/l10n/es_CR.json
@@ -0,0 +1,162 @@
+{ "translations": {
+ "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
+ "Storage invalid" : "El almacenamiento es inválido",
+ "Unknown error" : "Se presentó un error desconocido",
+ "All files" : "Todos los archivos",
+ "Recent" : "Reciente",
+ "File could not be found" : "No fue posible encontrar el archivo",
+ "Home" : "Inicio",
+ "Close" : "Cerrar",
+ "Favorites" : "Favoritos",
+ "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
+ "Upload cancelled." : "Carga cancelada.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
+ "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
+ "Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
+ "Actions" : "Acciones",
+ "Download" : "Descargar",
+ "Rename" : "Renombrar",
+ "Move or copy" : "Mover o copiar",
+ "Target folder" : "Carpeta destino",
+ "Delete" : "Borrar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
+ "Details" : "Detalles",
+ "Select" : "Seleccionar",
+ "Pending" : "Pendiente",
+ "Unable to determine date" : "No fue posible determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
+ "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
+ "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
+ "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
+ "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
+ "{newName} already exists" : "{newName} ya existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
+ "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
+ "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
+ "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
+ "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}",
+ "Name" : "Nombre",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado",
+ "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
+ "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
+ "{dirs} and {files}" : "{dirs} y {files}",
+ "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
+ "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
+ "New" : "Nuevo",
+ "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
+ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
+ "View in folder" : "Ver en la carpeta",
+ "Copied!" : "¡Copiado!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
+ "Path" : "Ruta",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
+ "New folder" : "Carpeta nueva",
+ "Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
+ "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
+ "Added to favorites" : "Agregado a los favoritos",
+ "Removed from favorites" : "Eliminado de los favoritos",
+ "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
+ "File changes" : "Cambios al archivo",
+ "Created by {user}" : "Creado por {user}",
+ "Changed by {user}" : "Cambiado por {user}",
+ "Deleted by {user}" : "Borrado por {user}",
+ "Restored by {user}" : "Restaurado por {user}",
+ "Renamed by {user}" : "Renombrado por {user}",
+ "Moved by {user}" : "Movido por {user}",
+ "\"remote user\"" : "\"usuario remoto\"",
+ "You created {file}" : "Creaste {file}",
+ "{user} created {file}" : "{user} creó {file}",
+ "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
+ "You changed {file}" : "Cambiaste {file}",
+ "{user} changed {file}" : "{user} cambió {file}",
+ "You deleted {file}" : "Borraste {file}",
+ "{user} deleted {file}" : "{user} borró {file}",
+ "You restored {file}" : "Restauraste {file}",
+ "{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
+ "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
+ "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "Unlimited" : "Ilimitado",
+ "Upload (max. %s)" : "Cargar (max. %s)",
+ "File handling" : "Manejo de archivos",
+ "Maximum upload size" : "Tamaño máximo de carga",
+ "max. possible: " : "max. posible:",
+ "Save" : "Guardar",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
+ "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
+ "%s of %s used" : "%s de %s usado",
+ "%s used" : "%s usado",
+ "Settings" : "Configuraciones ",
+ "Show hidden files" : "Mostrar archivos ocultos",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
+ "Cancel upload" : "Cancelar carga",
+ "No files in here" : "No hay archivos aquí",
+ "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Upload too large" : "La carga es demasido grande",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
+ "No favorites yet" : "Aún no hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Archivos borrados",
+ "Text file" : "Archivo de texto",
+ "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
+ "Uploading..." : "Cargando...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momento...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Move" : "Mover",
+ "Copy local link" : "Copiar liga local",
+ "Folder" : "Carpeta",
+ "Upload" : "Cargar",
+ "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "No favorites" : "No hay favoritos"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files/l10n/es_DO.js b/apps/files/l10n/es_DO.js
new file mode 100644
index 00000000000..ce1f5db9667
--- /dev/null
+++ b/apps/files/l10n/es_DO.js
@@ -0,0 +1,164 @@
+OC.L10N.register(
+ "files",
+ {
+ "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
+ "Storage invalid" : "El almacenamiento es inválido",
+ "Unknown error" : "Se presentó un error desconocido",
+ "All files" : "Todos los archivos",
+ "Recent" : "Reciente",
+ "File could not be found" : "No fue posible encontrar el archivo",
+ "Home" : "Inicio",
+ "Close" : "Cerrar",
+ "Favorites" : "Favoritos",
+ "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
+ "Upload cancelled." : "Carga cancelada.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
+ "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
+ "Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
+ "Actions" : "Acciones",
+ "Download" : "Descargar",
+ "Rename" : "Renombrar",
+ "Move or copy" : "Mover o copiar",
+ "Target folder" : "Carpeta destino",
+ "Delete" : "Borrar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
+ "Details" : "Detalles",
+ "Select" : "Seleccionar",
+ "Pending" : "Pendiente",
+ "Unable to determine date" : "No fue posible determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
+ "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
+ "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
+ "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
+ "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
+ "{newName} already exists" : "{newName} ya existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
+ "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
+ "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
+ "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
+ "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}",
+ "Name" : "Nombre",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado",
+ "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
+ "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
+ "{dirs} and {files}" : "{dirs} y {files}",
+ "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
+ "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
+ "New" : "Nuevo",
+ "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
+ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
+ "View in folder" : "Ver en la carpeta",
+ "Copied!" : "¡Copiado!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
+ "Path" : "Ruta",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
+ "New folder" : "Carpeta nueva",
+ "Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
+ "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
+ "Added to favorites" : "Agregado a los favoritos",
+ "Removed from favorites" : "Eliminado de los favoritos",
+ "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
+ "File changes" : "Cambios al archivo",
+ "Created by {user}" : "Creado por {user}",
+ "Changed by {user}" : "Cambiado por {user}",
+ "Deleted by {user}" : "Borrado por {user}",
+ "Restored by {user}" : "Restaurado por {user}",
+ "Renamed by {user}" : "Renombrado por {user}",
+ "Moved by {user}" : "Movido por {user}",
+ "\"remote user\"" : "\"usuario remoto\"",
+ "You created {file}" : "Creaste {file}",
+ "{user} created {file}" : "{user} creó {file}",
+ "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
+ "You changed {file}" : "Cambiaste {file}",
+ "{user} changed {file}" : "{user} cambió {file}",
+ "You deleted {file}" : "Borraste {file}",
+ "{user} deleted {file}" : "{user} borró {file}",
+ "You restored {file}" : "Restauraste {file}",
+ "{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
+ "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
+ "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "Unlimited" : "Ilimitado",
+ "Upload (max. %s)" : "Cargar (max. %s)",
+ "File handling" : "Manejo de archivos",
+ "Maximum upload size" : "Tamaño máximo de carga",
+ "max. possible: " : "max. posible:",
+ "Save" : "Guardar",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
+ "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
+ "%s of %s used" : "%s de %s usado",
+ "%s used" : "%s usado",
+ "Settings" : "Configuraciones ",
+ "Show hidden files" : "Mostrar archivos ocultos",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
+ "Cancel upload" : "Cancelar carga",
+ "No files in here" : "No hay archivos aquí",
+ "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Upload too large" : "La carga es demasido grande",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
+ "No favorites yet" : "Aún no hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Archivos borrados",
+ "Text file" : "Archivo de texto",
+ "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
+ "Uploading..." : "Cargando...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momento...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Move" : "Mover",
+ "Copy local link" : "Copiar liga local",
+ "Folder" : "Carpeta",
+ "Upload" : "Cargar",
+ "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "No favorites" : "No hay favoritos"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_DO.json b/apps/files/l10n/es_DO.json
new file mode 100644
index 00000000000..cabba647c0e
--- /dev/null
+++ b/apps/files/l10n/es_DO.json
@@ -0,0 +1,162 @@
+{ "translations": {
+ "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
+ "Storage invalid" : "El almacenamiento es inválido",
+ "Unknown error" : "Se presentó un error desconocido",
+ "All files" : "Todos los archivos",
+ "Recent" : "Reciente",
+ "File could not be found" : "No fue posible encontrar el archivo",
+ "Home" : "Inicio",
+ "Close" : "Cerrar",
+ "Favorites" : "Favoritos",
+ "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
+ "Upload cancelled." : "Carga cancelada.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
+ "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
+ "Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
+ "…" : "...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
+ "Actions" : "Acciones",
+ "Download" : "Descargar",
+ "Rename" : "Renombrar",
+ "Move or copy" : "Mover o copiar",
+ "Target folder" : "Carpeta destino",
+ "Delete" : "Borrar",
+ "Disconnect storage" : "Desconectar almacenamiento",
+ "Unshare" : "Dejar de compartir",
+ "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
+ "Files" : "Archivos",
+ "Details" : "Detalles",
+ "Select" : "Seleccionar",
+ "Pending" : "Pendiente",
+ "Unable to determine date" : "No fue posible determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
+ "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
+ "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
+ "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
+ "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
+ "{newName} already exists" : "{newName} ya existe",
+ "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
+ "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
+ "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
+ "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
+ "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
+ "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}",
+ "Name" : "Nombre",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado",
+ "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
+ "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
+ "{dirs} and {files}" : "{dirs} y {files}",
+ "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
+ "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
+ "New" : "Nuevo",
+ "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
+ "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
+ "View in folder" : "Ver en la carpeta",
+ "Copied!" : "¡Copiado!",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
+ "Path" : "Ruta",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Favorited" : "Marcado como favorito",
+ "Favorite" : "Favorito",
+ "New folder" : "Carpeta nueva",
+ "Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
+ "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
+ "Added to favorites" : "Agregado a los favoritos",
+ "Removed from favorites" : "Eliminado de los favoritos",
+ "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
+ "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
+ "File changes" : "Cambios al archivo",
+ "Created by {user}" : "Creado por {user}",
+ "Changed by {user}" : "Cambiado por {user}",
+ "Deleted by {user}" : "Borrado por {user}",
+ "Restored by {user}" : "Restaurado por {user}",
+ "Renamed by {user}" : "Renombrado por {user}",
+ "Moved by {user}" : "Movido por {user}",
+ "\"remote user\"" : "\"usuario remoto\"",
+ "You created {file}" : "Creaste {file}",
+ "{user} created {file}" : "{user} creó {file}",
+ "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
+ "You changed {file}" : "Cambiaste {file}",
+ "{user} changed {file}" : "{user} cambió {file}",
+ "You deleted {file}" : "Borraste {file}",
+ "{user} deleted {file}" : "{user} borró {file}",
+ "You restored {file}" : "Restauraste {file}",
+ "{user} restored {file}" : "{user} restauró {file}",
+ "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
+ "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
+ "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "Unlimited" : "Ilimitado",
+ "Upload (max. %s)" : "Cargar (max. %s)",
+ "File handling" : "Manejo de archivos",
+ "Maximum upload size" : "Tamaño máximo de carga",
+ "max. possible: " : "max. posible:",
+ "Save" : "Guardar",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
+ "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
+ "%s of %s used" : "%s de %s usado",
+ "%s used" : "%s usado",
+ "Settings" : "Configuraciones ",
+ "Show hidden files" : "Mostrar archivos ocultos",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
+ "Cancel upload" : "Cancelar carga",
+ "No files in here" : "No hay archivos aquí",
+ "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Upload too large" : "La carga es demasido grande",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
+ "No favorites yet" : "Aún no hay favoritos",
+ "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Archivos borrados",
+ "Text file" : "Archivo de texto",
+ "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
+ "Uploading..." : "Cargando...",
+ "..." : "...",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "En cualquier momento...",
+ "Soon..." : "Pronto...",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Move" : "Mover",
+ "Copy local link" : "Copiar liga local",
+ "Folder" : "Carpeta",
+ "Upload" : "Cargar",
+ "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
+ "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
+ "No favorites" : "No hay favoritos"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index 4f242d15a7a..ce1f5db9667 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
"Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
"Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -76,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favorito",
"New folder" : "Carpeta nueva",
"Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
"An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
"Added to favorites" : "Agregado a los favoritos",
"Removed from favorites" : "Eliminado de los favoritos",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index 284e43b4ab6..cabba647c0e 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
"Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
"Not enough free space" : "No cuentas con suficiente espacio libre",
+ "Uploading …" : "Cargando...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Actions" : "Acciones",
@@ -74,6 +75,9 @@
"Favorite" : "Favorito",
"New folder" : "Carpeta nueva",
"Upload file" : "Cargar archivo",
+ "Not favorited" : "No es un favorito",
+ "Remove from favorites" : "Eliminar de favoritos",
+ "Add to favorites" : "Agregar a favoritos",
"An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
"Added to favorites" : "Agregado a los favoritos",
"Removed from favorites" : "Eliminado de los favoritos",
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index e5c6f8dd9cf..af69bc93958 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -16,11 +16,13 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago",
"Target folder \"{dir}\" does not exist any more" : "\"{dir}\" karpeta ez du gehiago existitzen",
"Not enough free space" : "Ez dago nahiko leku librea",
+ "Uploading …" : "Igotzen...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
"Actions" : "Ekintzak",
"Download" : "Deskargatu",
"Rename" : "Berrizendatu",
+ "Move or copy" : "Mugitu edo kopiatu",
"Target folder" : "Xede karpeta",
"Delete" : "Ezabatu",
"Disconnect storage" : "Deskonektatu biltegia",
@@ -35,6 +37,10 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, begira itzazu erregistroa edo administratzailearekin harremanetan jarri",
"Could not move \"{file}\", target exists" : "Ezin da \"{file}\" mugitu, helburuan existitzen da jadanik",
"Could not move \"{file}\"" : "Ezin da mugitu \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "Ezin da \"{file}\" kopiatu; helburuan existitzen da",
+ "Could not copy \"{file}\"" : "Ezin da \"{file}\" kopiatu",
+ "Copied {origin} inside {destination}" : "{origin} {destination} barruan kopiatu da",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} eta {nbfiles} beste fitxategiak {destination}-en kopiatu dira",
"{newName} already exists" : "{newName} existitzen da dagoeneko",
"Could not rename \"{fileName}\", it does not exist any more" : "Ezin izan da \"{fileName}\" berrizendatu, ez da existitzen",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" izena dagoeneko dago erabilita \"{dir}\" karpetan. Mesedez, beste bat aukeratu.",
@@ -71,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Gogokoa",
"New folder" : "Karpeta berria",
"Upload file" : "Igo fitxategia",
+ "Not favorited" : "Ez da gogokoa",
+ "Remove from favorites" : "Gogokoetatik kenduta",
+ "Add to favorites" : "Gogokoetara gehitu",
"An error occurred while trying to update the tags" : "Errore bat gertatu da etiketak eguneratzerakoan",
"Added to favorites" : "Gogokoetan gehitu da",
"Removed from favorites" : "Gogokoetatik kendu da",
@@ -117,6 +126,7 @@ OC.L10N.register(
"Show hidden files" : "Erakutsi ezkutuko fitxategiak",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Erabili helbide hau <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV bidez zure fitxategietara sartzeko </a> ",
+ "Cancel upload" : "Igoera bertan behera utzita",
"No files in here" : "Ez dago fitxategirik hemen",
"Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!",
"No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan",
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index 3268af89515..151eed97867 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -14,11 +14,13 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago",
"Target folder \"{dir}\" does not exist any more" : "\"{dir}\" karpeta ez du gehiago existitzen",
"Not enough free space" : "Ez dago nahiko leku librea",
+ "Uploading …" : "Igotzen...",
"…" : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})",
"Actions" : "Ekintzak",
"Download" : "Deskargatu",
"Rename" : "Berrizendatu",
+ "Move or copy" : "Mugitu edo kopiatu",
"Target folder" : "Xede karpeta",
"Delete" : "Ezabatu",
"Disconnect storage" : "Deskonektatu biltegia",
@@ -33,6 +35,10 @@
"This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, begira itzazu erregistroa edo administratzailearekin harremanetan jarri",
"Could not move \"{file}\", target exists" : "Ezin da \"{file}\" mugitu, helburuan existitzen da jadanik",
"Could not move \"{file}\"" : "Ezin da mugitu \"{file}\"",
+ "Could not copy \"{file}\", target exists" : "Ezin da \"{file}\" kopiatu; helburuan existitzen da",
+ "Could not copy \"{file}\"" : "Ezin da \"{file}\" kopiatu",
+ "Copied {origin} inside {destination}" : "{origin} {destination} barruan kopiatu da",
+ "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} eta {nbfiles} beste fitxategiak {destination}-en kopiatu dira",
"{newName} already exists" : "{newName} existitzen da dagoeneko",
"Could not rename \"{fileName}\", it does not exist any more" : "Ezin izan da \"{fileName}\" berrizendatu, ez da existitzen",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" izena dagoeneko dago erabilita \"{dir}\" karpetan. Mesedez, beste bat aukeratu.",
@@ -69,6 +75,9 @@
"Favorite" : "Gogokoa",
"New folder" : "Karpeta berria",
"Upload file" : "Igo fitxategia",
+ "Not favorited" : "Ez da gogokoa",
+ "Remove from favorites" : "Gogokoetatik kenduta",
+ "Add to favorites" : "Gogokoetara gehitu",
"An error occurred while trying to update the tags" : "Errore bat gertatu da etiketak eguneratzerakoan",
"Added to favorites" : "Gogokoetan gehitu da",
"Removed from favorites" : "Gogokoetatik kendu da",
@@ -115,6 +124,7 @@
"Show hidden files" : "Erakutsi ezkutuko fitxategiak",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Erabili helbide hau <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV bidez zure fitxategietara sartzeko </a> ",
+ "Cancel upload" : "Igoera bertan behera utzita",
"No files in here" : "Ez dago fitxategirik hemen",
"Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!",
"No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 8d3566bbc6c..5461b88999a 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Niet genoeg vrije ruimte. Je uploadt {size1}, maar er is slechts {size2} beschikbaar",
"Target folder \"{dir}\" does not exist any more" : "Doelmap \"{dir}\" bestaat niet meer",
"Not enough free space" : "Onvoldoende vrije ruimte",
+ "Uploading …" : "Uploaden …",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} van {totalSize} ({bitrate})",
"Actions" : "Acties",
@@ -76,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Favoriet",
"New folder" : "Nieuwe map",
"Upload file" : "Bestand uploaden",
+ "Not favorited" : "Niet in favorieten",
+ "Remove from favorites" : "Verwijder van favorieten",
+ "Add to favorites" : "Aan favorieten toevoegen",
"An error occurred while trying to update the tags" : "Er trad een fout op bij jouw poging om de markeringen bij te werken",
"Added to favorites" : "Toevoegen aan favorieten",
"Removed from favorites" : "Verwijderen uit favorieten",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index f63991de8ff..bf02491b393 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Niet genoeg vrije ruimte. Je uploadt {size1}, maar er is slechts {size2} beschikbaar",
"Target folder \"{dir}\" does not exist any more" : "Doelmap \"{dir}\" bestaat niet meer",
"Not enough free space" : "Onvoldoende vrije ruimte",
+ "Uploading …" : "Uploaden …",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} van {totalSize} ({bitrate})",
"Actions" : "Acties",
@@ -74,6 +75,9 @@
"Favorite" : "Favoriet",
"New folder" : "Nieuwe map",
"Upload file" : "Bestand uploaden",
+ "Not favorited" : "Niet in favorieten",
+ "Remove from favorites" : "Verwijder van favorieten",
+ "Add to favorites" : "Aan favorieten toevoegen",
"An error occurred while trying to update the tags" : "Er trad een fout op bij jouw poging om de markeringen bij te werken",
"Added to favorites" : "Toevoegen aan favorieten",
"Removed from favorites" : "Verwijderen uit favorieten",
diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js
index 26735d04a69..b103172e819 100644
--- a/apps/files/l10n/sk.js
+++ b/apps/files/l10n/sk.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
"Target folder \"{dir}\" does not exist any more" : "Cieľový priečinok \"{dir}\" už neexistuje",
"Not enough free space" : "Nedostatok voľného miesta",
+ "Uploading …" : "Nahrávanie...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Akcie",
@@ -76,6 +77,9 @@ OC.L10N.register(
"Favorite" : "Obľúbené",
"New folder" : "Nový priečinok",
"Upload file" : "Nahrať súbor",
+ "Not favorited" : "Nie je obľúbený",
+ "Remove from favorites" : "Odstrániť z obľúbených",
+ "Add to favorites" : "Pridať do obľúbených",
"An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe",
"Added to favorites" : "Pridané do obľúbených",
"Removed from favorites" : "Odstránené z obľúbených",
diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json
index 61c551c0d29..5947e0b1dca 100644
--- a/apps/files/l10n/sk.json
+++ b/apps/files/l10n/sk.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nie je dostatok voľného miesta, chcete nahrať {size1} ale k dispozíciji je len {size2}",
"Target folder \"{dir}\" does not exist any more" : "Cieľový priečinok \"{dir}\" už neexistuje",
"Not enough free space" : "Nedostatok voľného miesta",
+ "Uploading …" : "Nahrávanie...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})",
"Actions" : "Akcie",
@@ -74,6 +75,9 @@
"Favorite" : "Obľúbené",
"New folder" : "Nový priečinok",
"Upload file" : "Nahrať súbor",
+ "Not favorited" : "Nie je obľúbený",
+ "Remove from favorites" : "Odstrániť z obľúbených",
+ "Add to favorites" : "Pridať do obľúbených",
"An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe",
"Added to favorites" : "Pridané do obľúbených",
"Removed from favorites" : "Odstránené z obľúbených",
diff --git a/apps/files_external/l10n/es_CR.js b/apps/files_external/l10n/es_CR.js
new file mode 100644
index 00000000000..720a7c663d2
--- /dev/null
+++ b/apps/files_external/l10n/es_CR.js
@@ -0,0 +1,134 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "External storages" : "Almacenamiento externo",
+ "Personal" : "Personal",
+ "System" : "Sistema",
+ "Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
+ "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?",
+ "Delete storage?" : "¿Borrar almacenamiento?",
+ "Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta del servidor vacía",
+ "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
+ "Username" : "Usuario",
+ "Password" : "Contraseña",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
+ "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
+ "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
+ "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
+ "None" : "Ninguno",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "App secret" : "Secreto de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "Client secret" : "Secreto del cliente",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Nombre de inquilino",
+ "Identity endpoint URL" : "URL del punto de enlace de Identidad",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
+ "Username and password" : "Usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
+ "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
+ "RSA public key" : "Llave pública RSA",
+ "Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Nombre del servidor",
+ "Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "https:// seguro",
+ "FTP" : "FTP",
+ "Host" : "Servidor",
+ "Secure ftps://" : "ftps:// seguro",
+ "Local" : "Local",
+ "Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "Username as share" : "Usuario como elemento compartido",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
+ "Name" : "Nombre",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar vistas previas",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
+ "Folder name" : "Nombre de la carpeta",
+ "External storage" : "Almacenamiento externo",
+ "Authentication" : "Autenticación",
+ "Configuration" : "Configuración",
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Configuraciones avanzadas",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es_CR.json b/apps/files_external/l10n/es_CR.json
new file mode 100644
index 00000000000..59b9db811b3
--- /dev/null
+++ b/apps/files_external/l10n/es_CR.json
@@ -0,0 +1,132 @@
+{ "translations": {
+ "External storages" : "Almacenamiento externo",
+ "Personal" : "Personal",
+ "System" : "Sistema",
+ "Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
+ "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?",
+ "Delete storage?" : "¿Borrar almacenamiento?",
+ "Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta del servidor vacía",
+ "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
+ "Username" : "Usuario",
+ "Password" : "Contraseña",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
+ "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
+ "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
+ "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
+ "None" : "Ninguno",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "App secret" : "Secreto de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "Client secret" : "Secreto del cliente",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Nombre de inquilino",
+ "Identity endpoint URL" : "URL del punto de enlace de Identidad",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
+ "Username and password" : "Usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
+ "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
+ "RSA public key" : "Llave pública RSA",
+ "Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Nombre del servidor",
+ "Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "https:// seguro",
+ "FTP" : "FTP",
+ "Host" : "Servidor",
+ "Secure ftps://" : "ftps:// seguro",
+ "Local" : "Local",
+ "Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "Username as share" : "Usuario como elemento compartido",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
+ "Name" : "Nombre",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar vistas previas",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
+ "Folder name" : "Nombre de la carpeta",
+ "External storage" : "Almacenamiento externo",
+ "Authentication" : "Autenticación",
+ "Configuration" : "Configuración",
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Configuraciones avanzadas",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/es_DO.js b/apps/files_external/l10n/es_DO.js
new file mode 100644
index 00000000000..720a7c663d2
--- /dev/null
+++ b/apps/files_external/l10n/es_DO.js
@@ -0,0 +1,134 @@
+OC.L10N.register(
+ "files_external",
+ {
+ "External storages" : "Almacenamiento externo",
+ "Personal" : "Personal",
+ "System" : "Sistema",
+ "Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
+ "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?",
+ "Delete storage?" : "¿Borrar almacenamiento?",
+ "Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta del servidor vacía",
+ "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
+ "Username" : "Usuario",
+ "Password" : "Contraseña",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
+ "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
+ "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
+ "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
+ "None" : "Ninguno",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "App secret" : "Secreto de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "Client secret" : "Secreto del cliente",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Nombre de inquilino",
+ "Identity endpoint URL" : "URL del punto de enlace de Identidad",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
+ "Username and password" : "Usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
+ "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
+ "RSA public key" : "Llave pública RSA",
+ "Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Nombre del servidor",
+ "Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "https:// seguro",
+ "FTP" : "FTP",
+ "Host" : "Servidor",
+ "Secure ftps://" : "ftps:// seguro",
+ "Local" : "Local",
+ "Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "Username as share" : "Usuario como elemento compartido",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
+ "Name" : "Nombre",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar vistas previas",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
+ "Folder name" : "Nombre de la carpeta",
+ "External storage" : "Almacenamiento externo",
+ "Authentication" : "Autenticación",
+ "Configuration" : "Configuración",
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Configuraciones avanzadas",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es_DO.json b/apps/files_external/l10n/es_DO.json
new file mode 100644
index 00000000000..59b9db811b3
--- /dev/null
+++ b/apps/files_external/l10n/es_DO.json
@@ -0,0 +1,132 @@
+{ "translations": {
+ "External storages" : "Almacenamiento externo",
+ "Personal" : "Personal",
+ "System" : "Sistema",
+ "Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Please provide a valid app key and secret." : "Por favor proporciona una llave de aplicación y secreto válidos.",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escribe para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
+ "Are you sure you want to delete this external storage" : "¿Estás seguro de que quieres borrar este almacenamiento externo?",
+ "Delete storage?" : "¿Borrar almacenamiento?",
+ "Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta del servidor vacía",
+ "Couldn't access. Please log out and in again to activate this mount point" : "No fue posible accesar. Por favor sal de la sesión y vuelve a entrar para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "No fue posible obtener el listado de los puntos de motaje de unidades de red Windows. Respuesta vacía del servidor",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Por favor has click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Por favor ingresa las credenciales para el montaje {mount}",
+ "Username" : "Usuario",
+ "Password" : "Contraseña",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with ID \"%d\" not found" : "El almacenamiento con ID \"%d\" no fue encontrado",
+ "Invalid backend or authentication mechanism class" : "Backend o clase de mecanismo de autenticación inválido ",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Invalid storage backend \"%s\"" : "Almacenamiento de backend \"%s\" inválido ",
+ "Not permitted to use backend \"%s\"" : "No está permitido usar el backend \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied backend parameters" : "Parametros del backend no satisfechos",
+ "Unsatisfied authentication mechanism parameters" : "Parámetros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "El almacenamiento con ID \"%d\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
+ "None" : "Ninguno",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "App secret" : "Secreto de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "Client secret" : "Secreto del cliente",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Nombre de inquilino",
+ "Identity endpoint URL" : "URL del punto de enlace de Identidad",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Log-in credentials, save in database" : "Credenciales de inicio de sesión, guardar en la base de datos",
+ "Username and password" : "Usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales de inicio de sesión, guardar en la sesión",
+ "User entered, store in database" : "Usuario ingresado, almacenar en la base de datos",
+ "RSA public key" : "Llave pública RSA",
+ "Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Nombre del servidor",
+ "Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
+ "WebDAV" : "WebDAV",
+ "URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "https:// seguro",
+ "FTP" : "FTP",
+ "Host" : "Servidor",
+ "Secure ftps://" : "ftps:// seguro",
+ "Local" : "Local",
+ "Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
+ "Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "Username as share" : "Usuario como elemento compartido",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Por favor solicita a tu administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Por favor solicita a tu administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Puedes agregar almacenamiento externo en las configuraciones personales",
+ "Name" : "Nombre",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar vistas previas",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
+ "Folder name" : "Nombre de la carpeta",
+ "External storage" : "Almacenamiento externo",
+ "Authentication" : "Autenticación",
+ "Configuration" : "Configuración",
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Configuraciones avanzadas",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de solicitud. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Se presentó una falla al buscar las fichas de acceso. Por favor verifica que tu llave de aplicación y tu secreto sean correctos. ",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_external/l10n/sk.js b/apps/files_external/l10n/sk.js
index a288544ce45..a37d4961abf 100644
--- a/apps/files_external/l10n/sk.js
+++ b/apps/files_external/l10n/sk.js
@@ -1,28 +1,40 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
- "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
- "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
- "External storage" : "Externé úložisko",
- "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
- "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "External storages" : "Externé úložiská",
"Personal" : "Osobné",
"System" : "Systém",
"Grant access" : "Povoliť prístup",
"Error configuring OAuth1" : "Chyba konfigurovania OAuth1",
+ "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
"Error configuring OAuth2" : "Chyba konfigurovania OAuth2",
"Generate keys" : "Vytvoriť kľúče",
"Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov",
"All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.",
"(group)" : "(skupina)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilita s Mac NFD enkódovaním (pomalé)",
+ "Admin defined" : "Nastavené správcom",
+ "Are you sure you want to delete this external storage" : "Naozaj chcete zmazať toto externé úložisko?",
+ "Delete storage?" : "Zmazať externé úložisko?",
"Saved" : "Uložené",
+ "Saving..." : "Ukladá sa...",
"Save" : "Uložiť",
+ "Empty response from the server" : "Prázdna odpoveď zo servera",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Nedá sa pripojiť. Pre aktiváciu tohto prípojného bodu sa prosím odhláste a znovu prihláste",
+ "Couldn't get the information from the remote server: {code} {type}" : "Zo vzdialeného servera sa nedá získať informácia: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nedá sa získať zoznam externých prípojných bodov: {type}",
+ "There was an error with message: " : "Nastala chyba s týmto hlásením:",
+ "External mount error" : "Chyba externého úložiska",
+ "external-storage" : "external-storage",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Nedá sa získať zoznam sieťových úložísk systému Windows: prázdna odpoveď zo servera",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Niektoré z nastavených externých úložísk nie sú pripojené. Pre viac informácií kliknite na červenú šípku(y)",
+ "Please enter the credentials for the {mount} mount" : "Zadajte prosím prihlasovacie údaje k prípojnému bodu {mount}",
"Username" : "Používateľské meno",
"Password" : "Heslo",
- "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Credentials saved" : "Prihlasovacie údaje uložené",
+ "Credentials saving failed" : "Uloženie prihlasovacích údajov zlyhalo",
+ "Credentials required" : "Vyžadované prihlasovacie údaje",
+ "Storage with ID \"%d\" not found" : "Úložisko s ID \"%d\" sa nenašlo",
"Invalid backend or authentication mechanism class" : "Neplatný backend, prípadne trieda mechanizmu autentifikácie",
"Invalid mount point" : "Chybný prípojný bod",
"Objectstore forbidden" : "Objectstore je zakáazaný",
@@ -31,6 +43,9 @@ OC.L10N.register(
"Not permitted to use authentication mechanism \"%s\"" : "Nie je povolené použiť autentifikačný mechanizmus \"%s\"",
"Unsatisfied backend parameters" : "Nedostatočné parametre backendu",
"Unsatisfied authentication mechanism parameters" : "Nedostatočné parametre autentifikačného mechanizmu",
+ "Insufficient data: %s" : "Nedostatočné dáta: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "Úložisko s ID \"%d\" nie je upraviteľné používateľmi",
"Access key" : "Prístupový kľúč",
"Secret key" : "Tajný kľúč",
"Builtin" : "Vstavaný",
@@ -47,7 +62,10 @@ OC.L10N.register(
"Rackspace" : "Rackspace",
"API key" : "API kľúč",
"Global credentials" : "Globálne oprávnenia",
+ "Log-in credentials, save in database" : "Prihlasovacie údaje, ukladať v databáze",
"Username and password" : "Meno a heslo",
+ "Log-in credentials, save in session" : "Prihlasovacie údaje, ukladať do relácie",
+ "User entered, store in database" : "Používateľ zadaný, uložiť v databáze",
"RSA public key" : "RSA verejný kľúč",
"Public key" : "Verejný kľúč",
"Amazon S3" : "Amazon S3",
@@ -61,15 +79,15 @@ OC.L10N.register(
"URL" : "URL",
"Remote subfolder" : "Vzdialený podpriečinok",
"Secure https://" : "Zabezpečené https://",
- "Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Hostiteľ",
"Secure ftps://" : "Zabezpečené ftps://",
- "Google Drive" : "Google Drive",
"Local" : "Lokálny",
"Location" : "Umiestnenie",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
+ "SFTP with secret key login" : "SFTP prihlásenie s tajným kľúčom",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "Sprístupniť",
"Domain" : "Doména",
@@ -78,6 +96,9 @@ OC.L10N.register(
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Názov služby",
"Request timeout (seconds)" : "Timeout požiadavky (s)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná cURL podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná FTP podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je nainštalované \"%s\". Pripojenie %s nie je možné. Požiadajte svojho správcu o inštaláciu.",
"No external storage configured" : "Žiadne externé úložisko nie je nakonfigurované",
"You can add external storages in the personal settings" : "Externé úložisko je možné pridať v osobných nastaveniach",
"Name" : "Názov",
@@ -85,16 +106,29 @@ OC.L10N.register(
"Scope" : "Rozsah",
"Enable encryption" : "Povoliť šifrovanie",
"Enable previews" : "Povoliť náhľady",
+ "Enable sharing" : "Povoliť sprístupňovanie",
"Check for changes" : "Zisťovať zmeny",
"Never" : "Nikdy",
"Once every direct access" : "S každým priamym prístupom",
"Folder name" : "Názov priečinka",
+ "External storage" : "Externé úložisko",
"Authentication" : "Autentifikácia",
"Configuration" : "Nastavenia",
"Available for" : "K dispozícii pre",
"Add storage" : "Pridať úložisko",
"Advanced settings" : "Rozšírené nastavenia",
"Delete" : "Zmazať",
- "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská"
+ "Allow users to mount external storage" : "Povoliť používateľom pripojiť externé úložiská",
+ "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
+ "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
+ "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
+ "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Storage with id \"%i\" is not user editable" : "Úložisko s id \"%i\" používatelia nemôžu upravovať",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_external/l10n/sk.json b/apps/files_external/l10n/sk.json
index 24592565e8e..c1b71b21204 100644
--- a/apps/files_external/l10n/sk.json
+++ b/apps/files_external/l10n/sk.json
@@ -1,26 +1,38 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
- "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
- "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
- "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
- "External storage" : "Externé úložisko",
- "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
- "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "External storages" : "Externé úložiská",
"Personal" : "Osobné",
"System" : "Systém",
"Grant access" : "Povoliť prístup",
"Error configuring OAuth1" : "Chyba konfigurovania OAuth1",
+ "Please provide a valid app key and secret." : "Zadajte prosím platný aplikačný kľúč a heslo (secret).",
"Error configuring OAuth2" : "Chyba konfigurovania OAuth2",
"Generate keys" : "Vytvoriť kľúče",
"Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov",
"All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.",
"(group)" : "(skupina)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilita s Mac NFD enkódovaním (pomalé)",
+ "Admin defined" : "Nastavené správcom",
+ "Are you sure you want to delete this external storage" : "Naozaj chcete zmazať toto externé úložisko?",
+ "Delete storage?" : "Zmazať externé úložisko?",
"Saved" : "Uložené",
+ "Saving..." : "Ukladá sa...",
"Save" : "Uložiť",
+ "Empty response from the server" : "Prázdna odpoveď zo servera",
+ "Couldn't access. Please log out and in again to activate this mount point" : "Nedá sa pripojiť. Pre aktiváciu tohto prípojného bodu sa prosím odhláste a znovu prihláste",
+ "Couldn't get the information from the remote server: {code} {type}" : "Zo vzdialeného servera sa nedá získať informácia: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nedá sa získať zoznam externých prípojných bodov: {type}",
+ "There was an error with message: " : "Nastala chyba s týmto hlásením:",
+ "External mount error" : "Chyba externého úložiska",
+ "external-storage" : "external-storage",
+ "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Nedá sa získať zoznam sieťových úložísk systému Windows: prázdna odpoveď zo servera",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Niektoré z nastavených externých úložísk nie sú pripojené. Pre viac informácií kliknite na červenú šípku(y)",
+ "Please enter the credentials for the {mount} mount" : "Zadajte prosím prihlasovacie údaje k prípojnému bodu {mount}",
"Username" : "Používateľské meno",
"Password" : "Heslo",
- "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Credentials saved" : "Prihlasovacie údaje uložené",
+ "Credentials saving failed" : "Uloženie prihlasovacích údajov zlyhalo",
+ "Credentials required" : "Vyžadované prihlasovacie údaje",
+ "Storage with ID \"%d\" not found" : "Úložisko s ID \"%d\" sa nenašlo",
"Invalid backend or authentication mechanism class" : "Neplatný backend, prípadne trieda mechanizmu autentifikácie",
"Invalid mount point" : "Chybný prípojný bod",
"Objectstore forbidden" : "Objectstore je zakáazaný",
@@ -29,6 +41,9 @@
"Not permitted to use authentication mechanism \"%s\"" : "Nie je povolené použiť autentifikačný mechanizmus \"%s\"",
"Unsatisfied backend parameters" : "Nedostatočné parametre backendu",
"Unsatisfied authentication mechanism parameters" : "Nedostatočné parametre autentifikačného mechanizmu",
+ "Insufficient data: %s" : "Nedostatočné dáta: %s",
+ "%s" : "%s",
+ "Storage with ID \"%d\" is not user editable" : "Úložisko s ID \"%d\" nie je upraviteľné používateľmi",
"Access key" : "Prístupový kľúč",
"Secret key" : "Tajný kľúč",
"Builtin" : "Vstavaný",
@@ -45,7 +60,10 @@
"Rackspace" : "Rackspace",
"API key" : "API kľúč",
"Global credentials" : "Globálne oprávnenia",
+ "Log-in credentials, save in database" : "Prihlasovacie údaje, ukladať v databáze",
"Username and password" : "Meno a heslo",
+ "Log-in credentials, save in session" : "Prihlasovacie údaje, ukladať do relácie",
+ "User entered, store in database" : "Používateľ zadaný, uložiť v databáze",
"RSA public key" : "RSA verejný kľúč",
"Public key" : "Verejný kľúč",
"Amazon S3" : "Amazon S3",
@@ -59,15 +77,15 @@
"URL" : "URL",
"Remote subfolder" : "Vzdialený podpriečinok",
"Secure https://" : "Zabezpečené https://",
- "Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Hostiteľ",
"Secure ftps://" : "Zabezpečené ftps://",
- "Google Drive" : "Google Drive",
"Local" : "Lokálny",
"Location" : "Umiestnenie",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
+ "SFTP with secret key login" : "SFTP prihlásenie s tajným kľúčom",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "Sprístupniť",
"Domain" : "Doména",
@@ -76,6 +94,9 @@
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Názov služby",
"Request timeout (seconds)" : "Timeout požiadavky (s)",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná cURL podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je povolená alebo nainštalovaná FTP podpora v PHP. Pripojenie %s nie je možné. Požiadajte svojho správcu, aby doplnil podporu.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Nie je nainštalované \"%s\". Pripojenie %s nie je možné. Požiadajte svojho správcu o inštaláciu.",
"No external storage configured" : "Žiadne externé úložisko nie je nakonfigurované",
"You can add external storages in the personal settings" : "Externé úložisko je možné pridať v osobných nastaveniach",
"Name" : "Názov",
@@ -83,16 +104,29 @@
"Scope" : "Rozsah",
"Enable encryption" : "Povoliť šifrovanie",
"Enable previews" : "Povoliť náhľady",
+ "Enable sharing" : "Povoliť sprístupňovanie",
"Check for changes" : "Zisťovať zmeny",
"Never" : "Nikdy",
"Once every direct access" : "S každým priamym prístupom",
"Folder name" : "Názov priečinka",
+ "External storage" : "Externé úložisko",
"Authentication" : "Autentifikácia",
"Configuration" : "Nastavenia",
"Available for" : "K dispozícii pre",
"Add storage" : "Pridať úložisko",
"Advanced settings" : "Rozšírené nastavenia",
"Delete" : "Zmazať",
- "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská"
+ "Allow users to mount external storage" : "Povoliť používateľom pripojiť externé úložiská",
+ "Allow users to mount the following external storage" : "Povoliť používateľom pripojiť tieto externé úložiská",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Sťahovanie tokenov požiadavky zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Sťahovanie prístupových tokenov zlyhalo. Overte prosím, či je aplikačný kľúč a heslo (secret) zadané správne.",
+ "Step 1 failed. Exception: %s" : "Krok 1 zlyhal. Výnimka: %s",
+ "Step 2 failed. Exception: %s" : "Krok 2 zlyhal. Výnimka: %s",
+ "Dropbox App Configuration" : "Nastavenie Dropbox aplikácie",
+ "Google Drive App Configuration" : "Nastavenie Google Drive aplikácie",
+ "Storage with id \"%i\" not found" : "Úložisko s ID \"%i\" sa nenašlo",
+ "Storage with id \"%i\" is not user editable" : "Úložisko s id \"%i\" používatelia nemôžu upravovať",
+ "Dropbox" : "Dropbox",
+ "Google Drive" : "Google Drive"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index f4119a55972..e98d29aeb8a 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -59,4 +59,10 @@ Turning the feature off removes shared files and folders on the server for all s
<step>OCA\Files_Sharing\Migration\SetPasswordColumn</step>
</post-migration>
</repair-steps>
+
+ <collaboration>
+ <plugins>
+ <plugin type="autocomplete-sort">OCA\Files_Sharing\Collaboration\ShareRecipientSorter</plugin>
+ </plugins>
+ </collaboration>
</info>
diff --git a/apps/files_sharing/composer/autoload.php b/apps/files_sharing/composer/autoload.php
index 3b046bff7f4..0aa77c00af9 100644
--- a/apps/files_sharing/composer/autoload.php
+++ b/apps/files_sharing/composer/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInitf32f03f7cd82bff20d6a51be16689441::getLoader();
+return ComposerAutoloaderInitFiles_Sharing::getLoader();
diff --git a/apps/files_sharing/composer/composer.json b/apps/files_sharing/composer/composer.json
index 4d2aae1d6e1..d500819ff82 100644
--- a/apps/files_sharing/composer/composer.json
+++ b/apps/files_sharing/composer/composer.json
@@ -2,7 +2,8 @@
"config" : {
"vendor-dir": ".",
"optimize-autoloader": true,
- "authorative-autoloader": true
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files_Sharing"
},
"autoload" : {
"psr-4": {
diff --git a/apps/files_sharing/composer/composer/autoload_classmap.php b/apps/files_sharing/composer/composer/autoload_classmap.php
index 48b9651a00d..a68db3421b6 100644
--- a/apps/files_sharing/composer/composer/autoload_classmap.php
+++ b/apps/files_sharing/composer/composer/autoload_classmap.php
@@ -19,6 +19,7 @@ return array(
'OCA\\Files_Sharing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\Files_Sharing\\Cache' => $baseDir . '/../lib/Cache.php',
'OCA\\Files_Sharing\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => $baseDir . '/../lib/Collaboration/ShareRecipientSorter.php',
'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => $baseDir . '/../lib/Command/CleanupRemoteStorages.php',
'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => $baseDir . '/../lib/Controller/ExternalSharesController.php',
'OCA\\Files_Sharing\\Controller\\PublicPreviewController' => $baseDir . '/../lib/Controller/PublicPreviewController.php',
diff --git a/apps/files_sharing/composer/composer/autoload_real.php b/apps/files_sharing/composer/composer/autoload_real.php
index fc2e3dcfcb0..504c701247f 100644
--- a/apps/files_sharing/composer/composer/autoload_real.php
+++ b/apps/files_sharing/composer/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInitf32f03f7cd82bff20d6a51be16689441
+class ComposerAutoloaderInitFiles_Sharing
{
private static $loader;
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitf32f03f7cd82bff20d6a51be16689441
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInitf32f03f7cd82bff20d6a51be16689441', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInitFiles_Sharing', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInitf32f03f7cd82bff20d6a51be16689441', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles_Sharing', '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';
- call_user_func(\Composer\Autoload\ComposerStaticInitf32f03f7cd82bff20d6a51be16689441::getInitializer($loader));
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles_Sharing::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
diff --git a/apps/files_sharing/composer/composer/autoload_static.php b/apps/files_sharing/composer/composer/autoload_static.php
index caabc5d50a3..328d6aca01d 100644
--- a/apps/files_sharing/composer/composer/autoload_static.php
+++ b/apps/files_sharing/composer/composer/autoload_static.php
@@ -4,7 +4,7 @@
namespace Composer\Autoload;
-class ComposerStaticInitf32f03f7cd82bff20d6a51be16689441
+class ComposerStaticInitFiles_Sharing
{
public static $prefixLengthsPsr4 = array (
'O' =>
@@ -34,6 +34,7 @@ class ComposerStaticInitf32f03f7cd82bff20d6a51be16689441
'OCA\\Files_Sharing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\Files_Sharing\\Cache' => __DIR__ . '/..' . '/../lib/Cache.php',
'OCA\\Files_Sharing\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => __DIR__ . '/..' . '/../lib/Collaboration/ShareRecipientSorter.php',
'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => __DIR__ . '/..' . '/../lib/Command/CleanupRemoteStorages.php',
'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => __DIR__ . '/..' . '/../lib/Controller/ExternalSharesController.php',
'OCA\\Files_Sharing\\Controller\\PublicPreviewController' => __DIR__ . '/..' . '/../lib/Controller/PublicPreviewController.php',
@@ -73,9 +74,9 @@ class ComposerStaticInitf32f03f7cd82bff20d6a51be16689441
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInitf32f03f7cd82bff20d6a51be16689441::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInitf32f03f7cd82bff20d6a51be16689441::$prefixDirsPsr4;
- $loader->classMap = ComposerStaticInitf32f03f7cd82bff20d6a51be16689441::$classMap;
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles_Sharing::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles_Sharing::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles_Sharing::$classMap;
}, null, ClassLoader::class);
}
diff --git a/apps/files_sharing/css/mobile.scss b/apps/files_sharing/css/mobile.scss
index 8e58aa439c6..56f57d53263 100644
--- a/apps/files_sharing/css/mobile.scss
+++ b/apps/files_sharing/css/mobile.scss
@@ -5,11 +5,6 @@
position: absolute !important;
}
-/* hide text of download button, only show icon */
-#download-text {
- display: none;
-}
-
/* hide size and date columns */
table th#headerSize,
table td.filesize,
@@ -51,5 +46,13 @@ table td.filename .nametext {
text-overflow: ellipsis;
}
+// Hide Download label of 3-dot-menu on public share pages
+.share-menutoggle-text {
+ display: none;
+}
+#header .menutoggle {
+ padding-right: 14px;
+ background-position: center;
+}
}
diff --git a/apps/files_sharing/css/public.scss b/apps/files_sharing/css/public.scss
index 652d36f77db..51c2bc9f4ce 100644
--- a/apps/files_sharing/css/public.scss
+++ b/apps/files_sharing/css/public.scss
@@ -1,6 +1,14 @@
#content {
height: initial;
- min-height: calc(100vh - 120px);
+ min-height: calc(100vh - 160px);
+}
+
+#header .menutoggle {
+ padding: 14px;
+ padding-right: 40px;
+ background-position: right 15px center;
+ color: $color-primary-text;
+ cursor: pointer;
}
/* force layout to make sure the content element's height matches its contents' height */
@@ -78,12 +86,6 @@ thead {
margin: 0;
}
-
-.directDownload,
-.directLink {
- margin-bottom: 20px;
-}
-
/* keep long file names in one line to not overflow download button on mobile */
.directDownload #downloadFile {
white-space: nowrap;
@@ -95,14 +97,17 @@ thead {
margin-right: auto;
}
-.directLink label {
- font-weight: normal;
+.download-size {
opacity: .5;
}
-.directLink input {
- margin-left: 5px;
- width: 300px;
- max-width: 90%;
+
+#directLink-container {
+ flex-wrap: wrap;
+}
+
+#directLink {
+ margin-left: 30px;
+ flex-basis: 100%;
}
/* header buttons */
@@ -125,11 +130,11 @@ thead {
/* within #save */
#save .save-form {
position: relative;
+ margin-right: -10px;
}
#remote_address {
width: 200px;
-
margin-right: 4px;
height: 31px;
}
@@ -138,10 +143,9 @@ thead {
position: absolute;
background-color: transparent;
border: none;
- margin: 2px 4px !important;
- right: 7px;
- top: -8px;
- height: 30px;
+ margin: 0;
+ right: 0px;
+ height: 40px;
}
#public-upload .avatardiv {
@@ -220,6 +224,7 @@ thead {
position: relative;
top: -10px;
font-weight: 300;
- font-size: 12px;
+ font-size: 11px;
+ opacity: .57;
margin-top: 10px;
}
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 1407737d007..2142dec1218 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -116,7 +116,9 @@ OCA.Sharing.PublicApp = {
scalingup: 0
};
- var img = $('<img class="publicpreview" alt="">');
+ var imgcontainer = $('<a href="' + $('#previewURL').val()
+ + '" target="_blank"><img class="publicpreview" alt=""></a>');
+ var img = imgcontainer.find('.publicpreview');
img.css({
'max-width': previewWidth,
'max-height': previewHeight
@@ -128,7 +130,7 @@ OCA.Sharing.PublicApp = {
if (mimetype === 'image/gif' &&
(maxGifSize === -1 || fileSize <= (maxGifSize * 1024 * 1024))) {
img.attr('src', $('#downloadURL').val());
- img.appendTo('#imgframe');
+ imgcontainer.appendTo('#imgframe');
} else if (mimetype.substr(0, mimetype.indexOf('/')) === 'text' && window.btoa) {
// Undocumented Url to public WebDAV endpoint
var url = parent.location.protocol + '//' + location.host + OC.linkTo('', 'public.php/webdav');
@@ -145,11 +147,11 @@ OCA.Sharing.PublicApp = {
mimetype.substr(0, mimetype.indexOf('/')) === 'image' &&
mimetype !== 'image/svg+xml') {
img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
- img.appendTo('#imgframe');
+ imgcontainer.appendTo('#imgframe');
} else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') {
img.attr('src', OC.Util.replaceSVGIcon(mimetypeIcon));
img.attr('width', 128);
- img.appendTo('#imgframe');
+ imgcontainer.appendTo('#imgframe');
}
else if (previewSupported === 'true') {
$('#imgframe > video').attr('poster', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
@@ -424,4 +426,18 @@ $(document).ready(function () {
return App.fileList.generatePreviewUrl(urlSpec);
};
}
+
+ $('#share-menutoggle').click(function() {
+ $('#share-menu').toggleClass('open');
+ });
+});
+
+
+$(document).mouseup(function(e) {
+ var container = $('#share-menu');
+
+ // if the target of the click isn't the container nor a descendant of the container
+ if (!container.is(e.target) && container.has(e.target).length === 0) {
+ container.removeClass('open');
+ }
});
diff --git a/apps/files_sharing/l10n/ast.js b/apps/files_sharing/l10n/ast.js
index 9c32cdfa94d..df59201feb3 100644
--- a/apps/files_sharing/l10n/ast.js
+++ b/apps/files_sharing/l10n/ast.js
@@ -79,8 +79,8 @@ OC.L10N.register(
"sharing is disabled" : "la compartición ta deshabilitada",
"For more info, please ask the person who sent this link." : "Pa más información, entrúga-y a la persona qu'unvió esti enllaz",
"Download" : "Baxar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enllaz direutu",
+ "Download %s" : "Descargar %s",
"Select or drop files" : "Esbilla o suelta ficheros",
"Uploading files…" : "Xubiendo ficheros...",
"Uploaded files:" : "Ficheros xubíos:",
diff --git a/apps/files_sharing/l10n/ast.json b/apps/files_sharing/l10n/ast.json
index 33f1bba4280..33b4aa40e43 100644
--- a/apps/files_sharing/l10n/ast.json
+++ b/apps/files_sharing/l10n/ast.json
@@ -77,8 +77,8 @@
"sharing is disabled" : "la compartición ta deshabilitada",
"For more info, please ask the person who sent this link." : "Pa más información, entrúga-y a la persona qu'unvió esti enllaz",
"Download" : "Baxar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enllaz direutu",
+ "Download %s" : "Descargar %s",
"Select or drop files" : "Esbilla o suelta ficheros",
"Uploading files…" : "Xubiendo ficheros...",
"Uploaded files:" : "Ficheros xubíos:",
diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js
index f354f90ad9a..51594ee5e5f 100644
--- a/apps/files_sharing/l10n/ca.js
+++ b/apps/files_sharing/l10n/ca.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "s'ha desactivat la compartició",
"For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.",
"shared by %s" : "compartit per %s",
- "Add to your Nextcloud" : "Afegeix al teu NextCloud",
"Download" : "Baixa",
- "Download %s" : "Baixa %s",
"Direct link" : "Enllaç directe",
+ "Add to your Nextcloud" : "Afegeix al teu NextCloud",
+ "Download %s" : "Baixa %s",
"Upload files to %s" : "Carrega fitxers a %s",
"Select or drop files" : "Selecciona o deixa anar els fitxers",
"Uploading files…" : "Pujant arxius...",
diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json
index 3a644180f21..1e85996c6c8 100644
--- a/apps/files_sharing/l10n/ca.json
+++ b/apps/files_sharing/l10n/ca.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "s'ha desactivat la compartició",
"For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.",
"shared by %s" : "compartit per %s",
- "Add to your Nextcloud" : "Afegeix al teu NextCloud",
"Download" : "Baixa",
- "Download %s" : "Baixa %s",
"Direct link" : "Enllaç directe",
+ "Add to your Nextcloud" : "Afegeix al teu NextCloud",
+ "Download %s" : "Baixa %s",
"Upload files to %s" : "Carrega fitxers a %s",
"Select or drop files" : "Selecciona o deixa anar els fitxers",
"Uploading files…" : "Pujant arxius...",
diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js
index db559d20574..400ea07acb0 100644
--- a/apps/files_sharing/l10n/cs.js
+++ b/apps/files_sharing/l10n/cs.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "sdílení je zakázané",
"For more info, please ask the person who sent this link." : "Pro více informací kontaktujte osobu, která vám zaslala tento odkaz.",
"shared by %s" : "Sdílel %s",
- "Add to your Nextcloud" : "Přidat do Nextcloud",
"Download" : "Stáhnout",
- "Download %s" : "Stáhnout %s",
"Direct link" : "Přímý odkaz",
+ "Add to your Nextcloud" : "Přidat do Nextcloud",
+ "Download %s" : "Stáhnout %s",
"Upload files to %s" : "Nahrát soubory do %s",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files…" : "Probíhá nahrávání souborů...",
diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json
index 35d14212588..9f2a1ecb86e 100644
--- a/apps/files_sharing/l10n/cs.json
+++ b/apps/files_sharing/l10n/cs.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "sdílení je zakázané",
"For more info, please ask the person who sent this link." : "Pro více informací kontaktujte osobu, která vám zaslala tento odkaz.",
"shared by %s" : "Sdílel %s",
- "Add to your Nextcloud" : "Přidat do Nextcloud",
"Download" : "Stáhnout",
- "Download %s" : "Stáhnout %s",
"Direct link" : "Přímý odkaz",
+ "Add to your Nextcloud" : "Přidat do Nextcloud",
+ "Download %s" : "Stáhnout %s",
"Upload files to %s" : "Nahrát soubory do %s",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files…" : "Probíhá nahrávání souborů...",
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index c59b3118945..7b1ca064ebb 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende dich bitte an die Person, die dir diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 3f8e5fc21e0..df0fff47e27 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende dich bitte an die Person, die dir diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Deiner Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index ef049bef8ee..a9b99fc1309 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wenden Sie sich bitte an die Person, die Ihnen diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index 65439f0497a..bc67d9fe3f6 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "Teilen ist deaktiviert",
"For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wenden Sie sich bitte an die Person, die Ihnen diesen Link geschickt hat.",
"shared by %s" : "von %s geteilt",
- "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
"Download" : "Herunterladen",
- "Download %s" : "Download %s",
"Direct link" : "Direkter Link",
+ "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Dateien für %s hochladen",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files…" : "Dateien werden hochgeladen…",
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index 6cd4f74b962..0ca8ebf285d 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "ο διαμοιρασμός απενεργοποιήθηκε",
"For more info, please ask the person who sent this link." : "Για περισσότερες πληροφορίες, παρακαλώ ρωτήστε το άτομο που σας έστειλε αυτόν τον σύνδεσμο.",
"shared by %s" : "Διαμοιράστηκε από 1 %s",
- "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
"Download" : "Λήψη",
- "Download %s" : "Λήψη %s",
"Direct link" : "Άμεσος σύνδεσμος",
+ "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
+ "Download %s" : "Λήψη %s",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Select or drop files" : "Επιλέξτε ή ρίξτε αρχεία",
"Uploading files…" : "Αποστολή αρχείων ...",
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index 07dfb485c8f..aa70d6689c5 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "ο διαμοιρασμός απενεργοποιήθηκε",
"For more info, please ask the person who sent this link." : "Για περισσότερες πληροφορίες, παρακαλώ ρωτήστε το άτομο που σας έστειλε αυτόν τον σύνδεσμο.",
"shared by %s" : "Διαμοιράστηκε από 1 %s",
- "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
"Download" : "Λήψη",
- "Download %s" : "Λήψη %s",
"Direct link" : "Άμεσος σύνδεσμος",
+ "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
+ "Download %s" : "Λήψη %s",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Select or drop files" : "Επιλέξτε ή ρίξτε αρχεία",
"Uploading files…" : "Αποστολή αρχείων ...",
diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js
index 16a2fa23b7e..b179dc6be47 100644
--- a/apps/files_sharing/l10n/en_GB.js
+++ b/apps/files_sharing/l10n/en_GB.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "sharing is disabled",
"For more info, please ask the person who sent this link." : "For more info, please ask the person who sent this link.",
"shared by %s" : "shared by %s",
- "Add to your Nextcloud" : "Add to your Nextcloud",
"Download" : "Download",
- "Download %s" : "Download %s",
"Direct link" : "Direct link",
+ "Add to your Nextcloud" : "Add to your Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload files to %s",
"Select or drop files" : "Select or drop files",
"Uploading files…" : "Uploading files…",
diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json
index 57848f3408c..6584ef966fc 100644
--- a/apps/files_sharing/l10n/en_GB.json
+++ b/apps/files_sharing/l10n/en_GB.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "sharing is disabled",
"For more info, please ask the person who sent this link." : "For more info, please ask the person who sent this link.",
"shared by %s" : "shared by %s",
- "Add to your Nextcloud" : "Add to your Nextcloud",
"Download" : "Download",
- "Download %s" : "Download %s",
"Direct link" : "Direct link",
+ "Add to your Nextcloud" : "Add to your Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload files to %s",
"Select or drop files" : "Select or drop files",
"Uploading files…" : "Uploading files…",
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index 1de76a820c2..aa8e28805aa 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "compartir está desactivado",
"For more info, please ask the person who sent this link." : "Para mayor información, contacte a la persona que le envió el enlace.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Añadir a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enlace directo",
+ "Add to your Nextcloud" : "Añadir a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Subir archivos a %s",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files…" : "Subiendo archivos...",
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index 8fd5b11667d..e23fb37c490 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "compartir está desactivado",
"For more info, please ask the person who sent this link." : "Para mayor información, contacte a la persona que le envió el enlace.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Añadir a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Enlace directo",
+ "Add to your Nextcloud" : "Añadir a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Subir archivos a %s",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files…" : "Subiendo archivos...",
diff --git a/apps/files_sharing/l10n/es_AR.js b/apps/files_sharing/l10n/es_AR.js
index c3f1303bf77..9857cd41ead 100644
--- a/apps/files_sharing/l10n/es_AR.js
+++ b/apps/files_sharing/l10n/es_AR.js
@@ -101,10 +101,10 @@ OC.L10N.register(
"the link expired" : "el link expiró",
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacte a la persona que le envió este link.",
- "Add to your Nextcloud" : "Agregar a su Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Link directa",
+ "Add to your Nextcloud" : "Agregar a su Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Seleccione o suelte los archivos",
"Uploading files…" : "Cargando archivos...",
diff --git a/apps/files_sharing/l10n/es_AR.json b/apps/files_sharing/l10n/es_AR.json
index 92878566507..3adcc360168 100644
--- a/apps/files_sharing/l10n/es_AR.json
+++ b/apps/files_sharing/l10n/es_AR.json
@@ -99,10 +99,10 @@
"the link expired" : "el link expiró",
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacte a la persona que le envió este link.",
- "Add to your Nextcloud" : "Agregar a su Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Link directa",
+ "Add to your Nextcloud" : "Agregar a su Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Seleccione o suelte los archivos",
"Uploading files…" : "Cargando archivos...",
diff --git a/apps/files_sharing/l10n/es_CO.js b/apps/files_sharing/l10n/es_CO.js
index ade55a2b2ed..620d498f604 100644
--- a/apps/files_sharing/l10n/es_CO.js
+++ b/apps/files_sharing/l10n/es_CO.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Agregar a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files…" : "Cargando archivos...",
diff --git a/apps/files_sharing/l10n/es_CO.json b/apps/files_sharing/l10n/es_CO.json
index 1b467ad8b96..43064dfb9c5 100644
--- a/apps/files_sharing/l10n/es_CO.json
+++ b/apps/files_sharing/l10n/es_CO.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Agregar a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files…" : "Cargando archivos...",
diff --git a/apps/files_sharing/l10n/es_CR.js b/apps/files_sharing/l10n/es_CR.js
new file mode 100644
index 00000000000..620d498f604
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CR.js
@@ -0,0 +1,115 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Shared with you" : "Compartido contigo",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido contigo aún",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
+ "Shared by" : "Compartido por",
+ "Sharing" : "Compartiendo",
+ "File shares" : "Archivos compartidos",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "Removed share for group {group}" : "Se eliminó el elemento compartido del grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} eliminó el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Compartiste {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Eliminaste al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó el grupo {group} de {file}",
+ "Shared as public link" : "Compartido como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Compartiste {file} como una liga pública",
+ "You removed public link for {file}" : "Eliminaste la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compartido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Recibiste un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} contigo",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Se eliminó el elemento compartido para {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} eliminó el elemento compartido para {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} eliminó el elemento compartido",
+ "You shared {file} with {user}" : "Compartiste {file} con {user}",
+ "You removed {user} from {file}" : "Eliminaste a {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} contigo",
+ "{actor} removed you from {file}" : "{actor} lo eliminó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Wrong share ID, share doesn't exist" : "ID del elemento compartido equivocado, el elemento compartido no existe",
+ "could not delete share" : "no fue posible borrar el elemento compartido",
+ "Could not delete share" : "No fue posible borrar el elemento compartido",
+ "Please specify a file or folder path" : "Por favor especifica un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "Could not create share" : "No fue posible crear el elemento compartido",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Por favor especifica un usuario válido",
+ "Group sharing is disabled by the administrator" : "Compartir en grupos está deshabilitado por el administrador",
+ "Please specify a valid group" : "Por favor especifica un grupo válido",
+ "Public link sharing is disabled by the administrator" : "Compartir ligas públicas está deshabilitado por el administrador",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "No puedes compartir al Círculo si la aplicación no está habilitada",
+ "Please specify a valid circle" : "Por favor especifica un círculo válido",
+ "Unknown share type" : "Tipo de elemento compartido desconocido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización está erróneo o falta",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "Share API is disabled" : "El API para compartir está deshabilitado",
+ "This share is password-protected" : "Este elemento compartido está protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Por favor inténtalo de nuevo.",
+ "Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Name" : "Nombre",
+ "Share time" : "Compartido desde",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, parece que esta liga ya no funciona. ",
+ "Reasons might be:" : "Las causas podrían ser:",
+ "the item was removed" : "el elemento fue eliminado",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
+ "shared by %s" : "compartido por %s",
+ "Download" : "Descargar",
+ "Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Select or drop files" : "Selecciona o suelta los archivos",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:",
+ "%s is publicly shared" : "%s está compartido públicamente"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es_CR.json b/apps/files_sharing/l10n/es_CR.json
new file mode 100644
index 00000000000..43064dfb9c5
--- /dev/null
+++ b/apps/files_sharing/l10n/es_CR.json
@@ -0,0 +1,113 @@
+{ "translations": {
+ "Shared with you" : "Compartido contigo",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido contigo aún",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
+ "Shared by" : "Compartido por",
+ "Sharing" : "Compartiendo",
+ "File shares" : "Archivos compartidos",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "Removed share for group {group}" : "Se eliminó el elemento compartido del grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} eliminó el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Compartiste {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Eliminaste al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó el grupo {group} de {file}",
+ "Shared as public link" : "Compartido como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Compartiste {file} como una liga pública",
+ "You removed public link for {file}" : "Eliminaste la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compartido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Recibiste un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} contigo",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Se eliminó el elemento compartido para {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} eliminó el elemento compartido para {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} eliminó el elemento compartido",
+ "You shared {file} with {user}" : "Compartiste {file} con {user}",
+ "You removed {user} from {file}" : "Eliminaste a {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} contigo",
+ "{actor} removed you from {file}" : "{actor} lo eliminó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Wrong share ID, share doesn't exist" : "ID del elemento compartido equivocado, el elemento compartido no existe",
+ "could not delete share" : "no fue posible borrar el elemento compartido",
+ "Could not delete share" : "No fue posible borrar el elemento compartido",
+ "Please specify a file or folder path" : "Por favor especifica un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "Could not create share" : "No fue posible crear el elemento compartido",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Por favor especifica un usuario válido",
+ "Group sharing is disabled by the administrator" : "Compartir en grupos está deshabilitado por el administrador",
+ "Please specify a valid group" : "Por favor especifica un grupo válido",
+ "Public link sharing is disabled by the administrator" : "Compartir ligas públicas está deshabilitado por el administrador",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "No puedes compartir al Círculo si la aplicación no está habilitada",
+ "Please specify a valid circle" : "Por favor especifica un círculo válido",
+ "Unknown share type" : "Tipo de elemento compartido desconocido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización está erróneo o falta",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "Share API is disabled" : "El API para compartir está deshabilitado",
+ "This share is password-protected" : "Este elemento compartido está protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Por favor inténtalo de nuevo.",
+ "Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Name" : "Nombre",
+ "Share time" : "Compartido desde",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, parece que esta liga ya no funciona. ",
+ "Reasons might be:" : "Las causas podrían ser:",
+ "the item was removed" : "el elemento fue eliminado",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
+ "shared by %s" : "compartido por %s",
+ "Download" : "Descargar",
+ "Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Select or drop files" : "Selecciona o suelta los archivos",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:",
+ "%s is publicly shared" : "%s está compartido públicamente"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/es_DO.js b/apps/files_sharing/l10n/es_DO.js
new file mode 100644
index 00000000000..620d498f604
--- /dev/null
+++ b/apps/files_sharing/l10n/es_DO.js
@@ -0,0 +1,115 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Shared with you" : "Compartido contigo",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido contigo aún",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
+ "Shared by" : "Compartido por",
+ "Sharing" : "Compartiendo",
+ "File shares" : "Archivos compartidos",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "Removed share for group {group}" : "Se eliminó el elemento compartido del grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} eliminó el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Compartiste {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Eliminaste al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó el grupo {group} de {file}",
+ "Shared as public link" : "Compartido como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Compartiste {file} como una liga pública",
+ "You removed public link for {file}" : "Eliminaste la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compartido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Recibiste un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} contigo",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Se eliminó el elemento compartido para {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} eliminó el elemento compartido para {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} eliminó el elemento compartido",
+ "You shared {file} with {user}" : "Compartiste {file} con {user}",
+ "You removed {user} from {file}" : "Eliminaste a {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} contigo",
+ "{actor} removed you from {file}" : "{actor} lo eliminó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Wrong share ID, share doesn't exist" : "ID del elemento compartido equivocado, el elemento compartido no existe",
+ "could not delete share" : "no fue posible borrar el elemento compartido",
+ "Could not delete share" : "No fue posible borrar el elemento compartido",
+ "Please specify a file or folder path" : "Por favor especifica un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "Could not create share" : "No fue posible crear el elemento compartido",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Por favor especifica un usuario válido",
+ "Group sharing is disabled by the administrator" : "Compartir en grupos está deshabilitado por el administrador",
+ "Please specify a valid group" : "Por favor especifica un grupo válido",
+ "Public link sharing is disabled by the administrator" : "Compartir ligas públicas está deshabilitado por el administrador",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "No puedes compartir al Círculo si la aplicación no está habilitada",
+ "Please specify a valid circle" : "Por favor especifica un círculo válido",
+ "Unknown share type" : "Tipo de elemento compartido desconocido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización está erróneo o falta",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "Share API is disabled" : "El API para compartir está deshabilitado",
+ "This share is password-protected" : "Este elemento compartido está protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Por favor inténtalo de nuevo.",
+ "Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Name" : "Nombre",
+ "Share time" : "Compartido desde",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, parece que esta liga ya no funciona. ",
+ "Reasons might be:" : "Las causas podrían ser:",
+ "the item was removed" : "el elemento fue eliminado",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
+ "shared by %s" : "compartido por %s",
+ "Download" : "Descargar",
+ "Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Select or drop files" : "Selecciona o suelta los archivos",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:",
+ "%s is publicly shared" : "%s está compartido públicamente"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es_DO.json b/apps/files_sharing/l10n/es_DO.json
new file mode 100644
index 00000000000..43064dfb9c5
--- /dev/null
+++ b/apps/files_sharing/l10n/es_DO.json
@@ -0,0 +1,113 @@
+{ "translations": {
+ "Shared with you" : "Compartido contigo",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido contigo aún",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
+ "Shared by" : "Compartido por",
+ "Sharing" : "Compartiendo",
+ "File shares" : "Archivos compartidos",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "Removed share for group {group}" : "Se eliminó el elemento compartido del grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} eliminó el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Compartiste {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Eliminaste al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} eliminó el grupo {group} de {file}",
+ "Shared as public link" : "Compartido como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Compartiste {file} como una liga pública",
+ "You removed public link for {file}" : "Eliminaste la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compartido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Recibiste un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} contigo",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Se eliminó el elemento compartido para {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} eliminó el elemento compartido para {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} eliminó el elemento compartido",
+ "You shared {file} with {user}" : "Compartiste {file} con {user}",
+ "You removed {user} from {file}" : "Eliminaste a {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} eliminó a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} contigo",
+ "{actor} removed you from {file}" : "{actor} lo eliminó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Wrong share ID, share doesn't exist" : "ID del elemento compartido equivocado, el elemento compartido no existe",
+ "could not delete share" : "no fue posible borrar el elemento compartido",
+ "Could not delete share" : "No fue posible borrar el elemento compartido",
+ "Please specify a file or folder path" : "Por favor especifica un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "Could not create share" : "No fue posible crear el elemento compartido",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Por favor especifica un usuario válido",
+ "Group sharing is disabled by the administrator" : "Compartir en grupos está deshabilitado por el administrador",
+ "Please specify a valid group" : "Por favor especifica un grupo válido",
+ "Public link sharing is disabled by the administrator" : "Compartir ligas públicas está deshabilitado por el administrador",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "No puedes compartir al Círculo si la aplicación no está habilitada",
+ "Please specify a valid circle" : "Por favor especifica un círculo válido",
+ "Unknown share type" : "Tipo de elemento compartido desconocido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización está erróneo o falta",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "Share API is disabled" : "El API para compartir está deshabilitado",
+ "This share is password-protected" : "Este elemento compartido está protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Por favor inténtalo de nuevo.",
+ "Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Name" : "Nombre",
+ "Share time" : "Compartido desde",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, parece que esta liga ya no funciona. ",
+ "Reasons might be:" : "Las causas podrían ser:",
+ "the item was removed" : "el elemento fue eliminado",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
+ "shared by %s" : "compartido por %s",
+ "Download" : "Descargar",
+ "Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Select or drop files" : "Selecciona o suelta los archivos",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:",
+ "%s is publicly shared" : "%s está compartido públicamente"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/es_MX.js b/apps/files_sharing/l10n/es_MX.js
index ade55a2b2ed..620d498f604 100644
--- a/apps/files_sharing/l10n/es_MX.js
+++ b/apps/files_sharing/l10n/es_MX.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Agregar a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files…" : "Cargando archivos...",
diff --git a/apps/files_sharing/l10n/es_MX.json b/apps/files_sharing/l10n/es_MX.json
index 1b467ad8b96..43064dfb9c5 100644
--- a/apps/files_sharing/l10n/es_MX.json
+++ b/apps/files_sharing/l10n/es_MX.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "compartir está deshabilitado",
"For more info, please ask the person who sent this link." : "Para mayores informes, contacta a la persona que le envió esta liga.",
"shared by %s" : "compartido por %s",
- "Add to your Nextcloud" : "Agregar a tu Nextcloud",
"Download" : "Descargar",
- "Download %s" : "Descargar %s",
"Direct link" : "Liga directa",
+ "Add to your Nextcloud" : "Agregar a tu Nextcloud",
+ "Download %s" : "Descargar %s",
"Upload files to %s" : "Cargar archivos a %s",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files…" : "Cargando archivos...",
diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js
index eeaf3eda179..23f4d2247da 100644
--- a/apps/files_sharing/l10n/fi.js
+++ b/apps/files_sharing/l10n/fi.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "jakaminen on poistettu käytöstä",
"For more info, please ask the person who sent this link." : "Kysy lisätietoja henkilöltä, jolta sait linkin.",
"shared by %s" : "%s jakama",
- "Add to your Nextcloud" : "Lisää Nextcloudiisi",
"Download" : "Lataa",
- "Download %s" : "Lataa %s",
"Direct link" : "Suora linkki",
+ "Add to your Nextcloud" : "Lisää Nextcloudiisi",
+ "Download %s" : "Lataa %s",
"Upload files to %s" : "Lähetä tiedostoja käyttäjälle %s",
"Select or drop files" : "Valitse tai pudota tiedostoja",
"Uploading files…" : "Lähetetään tiedostoja…",
diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json
index 4bae56c906b..4c8535e9e2c 100644
--- a/apps/files_sharing/l10n/fi.json
+++ b/apps/files_sharing/l10n/fi.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "jakaminen on poistettu käytöstä",
"For more info, please ask the person who sent this link." : "Kysy lisätietoja henkilöltä, jolta sait linkin.",
"shared by %s" : "%s jakama",
- "Add to your Nextcloud" : "Lisää Nextcloudiisi",
"Download" : "Lataa",
- "Download %s" : "Lataa %s",
"Direct link" : "Suora linkki",
+ "Add to your Nextcloud" : "Lisää Nextcloudiisi",
+ "Download %s" : "Lataa %s",
"Upload files to %s" : "Lähetä tiedostoja käyttäjälle %s",
"Select or drop files" : "Valitse tai pudota tiedostoja",
"Uploading files…" : "Lähetetään tiedostoja…",
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index c1938ff96f6..9eaae938c7a 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "le partage est désactivé",
"For more info, please ask the person who sent this link." : "Pour plus d'informations, veuillez contacter la personne qui a envoyé ce lien.",
"shared by %s" : "partagé par %s",
- "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
"Download" : "Télécharger",
- "Download %s" : "Télécharger %s",
"Direct link" : "Lien direct",
+ "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
+ "Download %s" : "Télécharger %s",
"Upload files to %s" : "Téléversement des fichiers vers %s",
"Select or drop files" : "Sélectionner ou glisser-déposer vos fichiers",
"Uploading files…" : "Téléversement des fichiers...",
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index 49694dcb1ca..b4a3434f0ea 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "le partage est désactivé",
"For more info, please ask the person who sent this link." : "Pour plus d'informations, veuillez contacter la personne qui a envoyé ce lien.",
"shared by %s" : "partagé par %s",
- "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
"Download" : "Télécharger",
- "Download %s" : "Télécharger %s",
"Direct link" : "Lien direct",
+ "Add to your Nextcloud" : "Ajouter à votre Nextcloud",
+ "Download %s" : "Télécharger %s",
"Upload files to %s" : "Téléversement des fichiers vers %s",
"Select or drop files" : "Sélectionner ou glisser-déposer vos fichiers",
"Uploading files…" : "Téléversement des fichiers...",
diff --git a/apps/files_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js
index 687b83c04a0..9705d709fa6 100644
--- a/apps/files_sharing/l10n/hu.js
+++ b/apps/files_sharing/l10n/hu.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért fordulj ahhoz, aki ezt a linket küldte neked!",
"shared by %s" : "megosztotta %s",
- "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
- "Download %s" : "%s letöltése",
"Direct link" : "Közvetlen hivatkozás",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
+ "Download %s" : "%s letöltése",
"Upload files to %s" : "Fájlok felöltése ide: %s",
"Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
"Uploading files…" : "Fájlok feltöltése...",
diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json
index 6ce460a4934..628741239dd 100644
--- a/apps/files_sharing/l10n/hu.json
+++ b/apps/files_sharing/l10n/hu.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért fordulj ahhoz, aki ezt a linket küldte neked!",
"shared by %s" : "megosztotta %s",
- "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
- "Download %s" : "%s letöltése",
"Direct link" : "Közvetlen hivatkozás",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
+ "Download %s" : "%s letöltése",
"Upload files to %s" : "Fájlok felöltése ide: %s",
"Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
"Uploading files…" : "Fájlok feltöltése...",
diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js
index e13b2f7356b..1a30960d8e6 100644
--- a/apps/files_sharing/l10n/is.js
+++ b/apps/files_sharing/l10n/is.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "slökkt er á skráadeilingu",
"For more info, please ask the person who sent this link." : "Til að vita meira skaltu hafa samband við þann sem sendi þér þennan tengil.",
"shared by %s" : "Deilt af %s",
- "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
"Download" : "Niðurhal",
- "Download %s" : "Sækja %s",
"Direct link" : "Beinn tengill",
+ "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
+ "Download %s" : "Sækja %s",
"Upload files to %s" : "Senda inn skrár á %s",
"Select or drop files" : "Veldu eða slepptu skrám",
"Uploading files…" : "Sendi inn skrár…",
diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json
index 38a5576209f..95756d1b509 100644
--- a/apps/files_sharing/l10n/is.json
+++ b/apps/files_sharing/l10n/is.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "slökkt er á skráadeilingu",
"For more info, please ask the person who sent this link." : "Til að vita meira skaltu hafa samband við þann sem sendi þér þennan tengil.",
"shared by %s" : "Deilt af %s",
- "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
"Download" : "Niðurhal",
- "Download %s" : "Sækja %s",
"Direct link" : "Beinn tengill",
+ "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud",
+ "Download %s" : "Sækja %s",
"Upload files to %s" : "Senda inn skrár á %s",
"Select or drop files" : "Veldu eða slepptu skrám",
"Uploading files…" : "Sendi inn skrár…",
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 7b86c519106..8285964c9ad 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "la condivisione è disabilitata",
"For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.",
"shared by %s" : "condiviso da %s",
- "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
"Download" : "Scarica",
- "Download %s" : "Scarica %s",
"Direct link" : "Collegamento diretto",
+ "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
+ "Download %s" : "Scarica %s",
"Upload files to %s" : "Carica file su %s",
"Select or drop files" : "Seleziona o deseleziona file",
"Uploading files…" : "Caricamento file in corso...",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index d8f9d9a8cbc..01725c8b2c3 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "la condivisione è disabilitata",
"For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.",
"shared by %s" : "condiviso da %s",
- "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
"Download" : "Scarica",
- "Download %s" : "Scarica %s",
"Direct link" : "Collegamento diretto",
+ "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud",
+ "Download %s" : "Scarica %s",
"Upload files to %s" : "Carica file su %s",
"Select or drop files" : "Seleziona o deseleziona file",
"Uploading files…" : "Caricamento file in corso...",
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index c6870472034..f105aad2035 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "共有は無効になっています",
"For more info, please ask the person who sent this link." : "不明な点は、こちらのリンクの提供者に確認をお願いします。",
"shared by %s" : "%s が共有",
- "Add to your Nextcloud" : "あなたのNextcloudに追加",
"Download" : "ダウンロード",
- "Download %s" : "%s をダウンロード",
"Direct link" : "リンク",
+ "Add to your Nextcloud" : "あなたのNextcloudに追加",
+ "Download %s" : "%s をダウンロード",
"Upload files to %s" : "%s にファイルをアップロード",
"Select or drop files" : "ファイルを選択するか、ドラッグ&ドロップしてください",
"Uploading files…" : "ファイルをアップロード中...",
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index 3155aee2032..33861a19427 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "共有は無効になっています",
"For more info, please ask the person who sent this link." : "不明な点は、こちらのリンクの提供者に確認をお願いします。",
"shared by %s" : "%s が共有",
- "Add to your Nextcloud" : "あなたのNextcloudに追加",
"Download" : "ダウンロード",
- "Download %s" : "%s をダウンロード",
"Direct link" : "リンク",
+ "Add to your Nextcloud" : "あなたのNextcloudに追加",
+ "Download %s" : "%s をダウンロード",
"Upload files to %s" : "%s にファイルをアップロード",
"Select or drop files" : "ファイルを選択するか、ドラッグ&ドロップしてください",
"Uploading files…" : "ファイルをアップロード中...",
diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js
index 9d4e2bab464..aad92ab9ef6 100644
--- a/apps/files_sharing/l10n/ko.js
+++ b/apps/files_sharing/l10n/ko.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "공유가 비활성화됨",
"For more info, please ask the person who sent this link." : "자세한 정보는 링크를 보낸 사람에게 문의하십시오.",
"shared by %s" : "%s에 의해 공유됨",
- "Add to your Nextcloud" : "내 Nextcloud에 추가",
"Download" : "다운로드",
- "Download %s" : "%s 다운로드",
"Direct link" : "직접 링크",
+ "Add to your Nextcloud" : "내 Nextcloud에 추가",
+ "Download %s" : "%s 다운로드",
"Upload files to %s" : "%s에 파일 업로드",
"Select or drop files" : "파일을 선택하거나 끌어다 놓기",
"Uploading files…" : "파일 업로드 중…",
diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json
index 3ddcbc5cf59..d60145d5faf 100644
--- a/apps/files_sharing/l10n/ko.json
+++ b/apps/files_sharing/l10n/ko.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "공유가 비활성화됨",
"For more info, please ask the person who sent this link." : "자세한 정보는 링크를 보낸 사람에게 문의하십시오.",
"shared by %s" : "%s에 의해 공유됨",
- "Add to your Nextcloud" : "내 Nextcloud에 추가",
"Download" : "다운로드",
- "Download %s" : "%s 다운로드",
"Direct link" : "직접 링크",
+ "Add to your Nextcloud" : "내 Nextcloud에 추가",
+ "Download %s" : "%s 다운로드",
"Upload files to %s" : "%s에 파일 업로드",
"Select or drop files" : "파일을 선택하거나 끌어다 놓기",
"Uploading files…" : "파일 업로드 중…",
diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js
index df07d22c787..d4826d8aaaf 100644
--- a/apps/files_sharing/l10n/lt_LT.js
+++ b/apps/files_sharing/l10n/lt_LT.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "dalinimasis yra išjungtas",
"For more info, please ask the person who sent this link." : "Dėl tikslesnės informacijos susisiekite su asmeniu atsiuntusiu nuorodą.",
"shared by %s" : "pasidalino %s",
- "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
"Download" : "Atsisiųsti",
- "Download %s" : "Atsisiųsti %s",
"Direct link" : "Tiesioginė nuoroda",
+ "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
+ "Download %s" : "Atsisiųsti %s",
"Upload files to %s" : "Įkelti duomenis į %s",
"Select or drop files" : "Pasirinkite arba vilkite failus",
"Uploading files…" : "Įkeliami failai…",
diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json
index e944a9f8c3b..2f82d3586bf 100644
--- a/apps/files_sharing/l10n/lt_LT.json
+++ b/apps/files_sharing/l10n/lt_LT.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "dalinimasis yra išjungtas",
"For more info, please ask the person who sent this link." : "Dėl tikslesnės informacijos susisiekite su asmeniu atsiuntusiu nuorodą.",
"shared by %s" : "pasidalino %s",
- "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
"Download" : "Atsisiųsti",
- "Download %s" : "Atsisiųsti %s",
"Direct link" : "Tiesioginė nuoroda",
+ "Add to your Nextcloud" : "Pridėti į jūsų NextCloud",
+ "Download %s" : "Atsisiųsti %s",
"Upload files to %s" : "Įkelti duomenis į %s",
"Select or drop files" : "Pasirinkite arba vilkite failus",
"Uploading files…" : "Įkeliami failai…",
diff --git a/apps/files_sharing/l10n/nb.js b/apps/files_sharing/l10n/nb.js
index e1c82112dbd..8541f92d474 100644
--- a/apps/files_sharing/l10n/nb.js
+++ b/apps/files_sharing/l10n/nb.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "deling er avskrudd",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
"shared by %s" : "delt av %s",
- "Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
- "Download %s" : "Last ned %s",
"Direct link" : "Direkte lenke",
+ "Add to your Nextcloud" : "Legg til i din Nextcloud",
+ "Download %s" : "Last ned %s",
"Upload files to %s" : "Last opp filer til %s",
"Select or drop files" : "Velg eller slipp filer",
"Uploading files…" : "Laster opp filer...",
diff --git a/apps/files_sharing/l10n/nb.json b/apps/files_sharing/l10n/nb.json
index e5bd108d5f2..b2d107be8a9 100644
--- a/apps/files_sharing/l10n/nb.json
+++ b/apps/files_sharing/l10n/nb.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "deling er avskrudd",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
"shared by %s" : "delt av %s",
- "Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
- "Download %s" : "Last ned %s",
"Direct link" : "Direkte lenke",
+ "Add to your Nextcloud" : "Legg til i din Nextcloud",
+ "Download %s" : "Last ned %s",
"Upload files to %s" : "Last opp filer til %s",
"Select or drop files" : "Velg eller slipp filer",
"Uploading files…" : "Laster opp filer...",
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index ccd1bbe33d1..e9d07a4999b 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "delen is uitgeschakeld",
"For more info, please ask the person who sent this link." : "Voor meer informatie, neem contact op met de persoon die u deze link heeft gestuurd.",
"shared by %s" : "Gedeeld door %s",
- "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
"Download" : "Downloaden",
- "Download %s" : "Download %s",
"Direct link" : "Directe link",
+ "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload bestanden naar %s",
"Select or drop files" : "Selecteer of leg bestanden neer",
"Uploading files…" : "Uploaden bestanden...",
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 4d9ebdd6728..d2faa20d31b 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "delen is uitgeschakeld",
"For more info, please ask the person who sent this link." : "Voor meer informatie, neem contact op met de persoon die u deze link heeft gestuurd.",
"shared by %s" : "Gedeeld door %s",
- "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
"Download" : "Downloaden",
- "Download %s" : "Download %s",
"Direct link" : "Directe link",
+ "Add to your Nextcloud" : "Toevoegen aan je Nextcloud",
+ "Download %s" : "Download %s",
"Upload files to %s" : "Upload bestanden naar %s",
"Select or drop files" : "Selecteer of leg bestanden neer",
"Uploading files…" : "Uploaden bestanden...",
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index 04529901ddb..049d7410cf1 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
"shared by %s" : "udostępnione przez %s",
- "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
- "Download %s" : "Pobierz %s",
"Direct link" : "Bezpośredni link",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
+ "Download %s" : "Pobierz %s",
"Upload files to %s" : "Prześlij pliki do %s",
"Select or drop files" : "Wybierz lub upuść pliki",
"Uploading files…" : "Wysyłanie plików...",
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index dc9886b06b8..39ff1e2523c 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
"shared by %s" : "udostępnione przez %s",
- "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
- "Download %s" : "Pobierz %s",
"Direct link" : "Bezpośredni link",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
+ "Download %s" : "Pobierz %s",
"Upload files to %s" : "Prześlij pliki do %s",
"Select or drop files" : "Wybierz lub upuść pliki",
"Uploading files…" : "Wysyłanie plików...",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index c0d84db4b3f..098a3ed6804 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "o compartilhamento está desativado",
"For more info, please ask the person who sent this link." : "Para mais informações, pergunte à pessoa que lhe enviou o link.",
"shared by %s" : "compartilhado por %s",
- "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
- "Download %s" : "Baixar %s",
"Direct link" : "Link direto",
+ "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
+ "Download %s" : "Baixar %s",
"Upload files to %s" : "Enviar arquivos para %s",
"Select or drop files" : "Selecione ou solte arquivos",
"Uploading files…" : "Enviando arquivos...",
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 42980162b62..8ab8a7cd1b2 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "o compartilhamento está desativado",
"For more info, please ask the person who sent this link." : "Para mais informações, pergunte à pessoa que lhe enviou o link.",
"shared by %s" : "compartilhado por %s",
- "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
- "Download %s" : "Baixar %s",
"Direct link" : "Link direto",
+ "Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
+ "Download %s" : "Baixar %s",
"Upload files to %s" : "Enviar arquivos para %s",
"Select or drop files" : "Selecione ou solte arquivos",
"Uploading files…" : "Enviando arquivos...",
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 1137df6df9c..7b8ac52ad5d 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "общий доступ отключён",
"For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.",
"shared by %s" : "начато %s",
- "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
"Download" : "Скачать",
- "Download %s" : "Скачать %s",
"Direct link" : "Прямая ссылка",
+ "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
+ "Download %s" : "Скачать %s",
"Upload files to %s" : "Загрузка файлов пользователю %s",
"Select or drop files" : "Выберите или перетащите файлы",
"Uploading files…" : "Загрузка файлов...",
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 54321a0b0c3..0153a00dcac 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "общий доступ отключён",
"For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.",
"shared by %s" : "начато %s",
- "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
"Download" : "Скачать",
- "Download %s" : "Скачать %s",
"Direct link" : "Прямая ссылка",
+ "Add to your Nextcloud" : "Добавить к вашему Nextcloud",
+ "Download %s" : "Скачать %s",
"Upload files to %s" : "Загрузка файлов пользователю %s",
"Select or drop files" : "Выберите или перетащите файлы",
"Uploading files…" : "Загрузка файлов...",
diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js
index 1882dad1a39..7652b6fd917 100644
--- a/apps/files_sharing/l10n/sk.js
+++ b/apps/files_sharing/l10n/sk.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "sprístupňovanie je zakázané",
"For more info, please ask the person who sent this link." : "Pre viac informácií kontaktujte osobu, ktorá vám poslala tento odkaz.",
"shared by %s" : "Sprístupnil %s",
- "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
"Download" : "Sťahovanie",
- "Download %s" : "Stiahnuť %s",
"Direct link" : "Priama linka",
+ "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
+ "Download %s" : "Stiahnuť %s",
"Upload files to %s" : "Nahrať súbory do %s",
"Select or drop files" : "Vyberte alebo položte súbory",
"Uploading files…" : "Nahrávanie súborov...",
diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json
index 5edc0bf926b..22988f09db2 100644
--- a/apps/files_sharing/l10n/sk.json
+++ b/apps/files_sharing/l10n/sk.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "sprístupňovanie je zakázané",
"For more info, please ask the person who sent this link." : "Pre viac informácií kontaktujte osobu, ktorá vám poslala tento odkaz.",
"shared by %s" : "Sprístupnil %s",
- "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
"Download" : "Sťahovanie",
- "Download %s" : "Stiahnuť %s",
"Direct link" : "Priama linka",
+ "Add to your Nextcloud" : "Pridať do svojho Nextcloud",
+ "Download %s" : "Stiahnuť %s",
"Upload files to %s" : "Nahrať súbory do %s",
"Select or drop files" : "Vyberte alebo položte súbory",
"Uploading files…" : "Nahrávanie súborov...",
diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js
index b828af91a73..baa6b3e8438 100644
--- a/apps/files_sharing/l10n/sq.js
+++ b/apps/files_sharing/l10n/sq.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "ndarjet janë çaktivizuar",
"For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
"shared by %s" : "ndarë nga %s",
- "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
"Download" : "Shkarko",
- "Download %s" : "Shkarko %s",
"Direct link" : "Lidhje e drejtpërdrejtë",
+ "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
+ "Download %s" : "Shkarko %s",
"Upload files to %s" : "Ngrako skedarët tek %s",
"Select or drop files" : "Përzgjidh ose hiq skedarët",
"Uploading files…" : "Skedarët po ngarkohen...",
diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json
index 0b525a14bab..c0c98e1b046 100644
--- a/apps/files_sharing/l10n/sq.json
+++ b/apps/files_sharing/l10n/sq.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "ndarjet janë çaktivizuar",
"For more info, please ask the person who sent this link." : "Për më shumë të dhëna, ju lutemi, pyetni personin që ju dërgoi këtë lidhje.",
"shared by %s" : "ndarë nga %s",
- "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
"Download" : "Shkarko",
- "Download %s" : "Shkarko %s",
"Direct link" : "Lidhje e drejtpërdrejtë",
+ "Add to your Nextcloud" : "Shtojeni tek Nextcloud-i juaj",
+ "Download %s" : "Shkarko %s",
"Upload files to %s" : "Ngrako skedarët tek %s",
"Select or drop files" : "Përzgjidh ose hiq skedarët",
"Uploading files…" : "Skedarët po ngarkohen...",
diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js
index 369b69ee567..c456e7b7a71 100644
--- a/apps/files_sharing/l10n/sr.js
+++ b/apps/files_sharing/l10n/sr.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "дељење је искључено",
"For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.",
"shared by %s" : "поделио %s",
- "Add to your Nextcloud" : "Додајте у свој облак",
"Download" : "Преузми",
- "Download %s" : "Преузми %s",
"Direct link" : "Директна веза",
+ "Add to your Nextcloud" : "Додајте у свој облак",
+ "Download %s" : "Преузми %s",
"Upload files to %s" : "Отпремите фајлове на%s",
"Select or drop files" : "Одаберите или превуците фајлове",
"Uploading files…" : "Отпремам фајлове…",
diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json
index 0353d5ff0ab..f2a61d654c8 100644
--- a/apps/files_sharing/l10n/sr.json
+++ b/apps/files_sharing/l10n/sr.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "дељење је искључено",
"For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.",
"shared by %s" : "поделио %s",
- "Add to your Nextcloud" : "Додајте у свој облак",
"Download" : "Преузми",
- "Download %s" : "Преузми %s",
"Direct link" : "Директна веза",
+ "Add to your Nextcloud" : "Додајте у свој облак",
+ "Download %s" : "Преузми %s",
"Upload files to %s" : "Отпремите фајлове на%s",
"Select or drop files" : "Одаберите или превуците фајлове",
"Uploading files…" : "Отпремам фајлове…",
diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js
index 0938d224b66..e79c78787d5 100644
--- a/apps/files_sharing/l10n/sv.js
+++ b/apps/files_sharing/l10n/sv.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "delning är inaktiverat",
"For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
"shared by %s" : "delad av %s",
- "Add to your Nextcloud" : "Lägg till i molnet",
"Download" : "Ladda ned",
- "Download %s" : "Ladda ned %s",
"Direct link" : "Direktlänk",
+ "Add to your Nextcloud" : "Lägg till i molnet",
+ "Download %s" : "Ladda ned %s",
"Upload files to %s" : "Ladda upp filer till %s",
"Select or drop files" : "Välj eller dra filer hit",
"Uploading files…" : "Laddar upp filer...",
diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json
index 0318f561ed3..4a7875b5103 100644
--- a/apps/files_sharing/l10n/sv.json
+++ b/apps/files_sharing/l10n/sv.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "delning är inaktiverat",
"For more info, please ask the person who sent this link." : "För mer information, kontakta den person som skickade den här länken.",
"shared by %s" : "delad av %s",
- "Add to your Nextcloud" : "Lägg till i molnet",
"Download" : "Ladda ned",
- "Download %s" : "Ladda ned %s",
"Direct link" : "Direktlänk",
+ "Add to your Nextcloud" : "Lägg till i molnet",
+ "Download %s" : "Ladda ned %s",
"Upload files to %s" : "Ladda upp filer till %s",
"Select or drop files" : "Välj eller dra filer hit",
"Uploading files…" : "Laddar upp filer...",
diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js
index ba1c08537b9..524333922e3 100644
--- a/apps/files_sharing/l10n/tr.js
+++ b/apps/files_sharing/l10n/tr.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "paylaşım devre dışı bırakılmış",
"For more info, please ask the person who sent this link." : "Ayrıntılı bilgi almak için bu bağlantıyı aldığınız kişi ile görüşün.",
"shared by %s" : "%s tarafından paylaşıldı",
- "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
"Download" : "İndir",
- "Download %s" : "%s İndir",
"Direct link" : "Doğrudan bağlantı",
+ "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
+ "Download %s" : "%s İndir",
"Upload files to %s" : "Dosyaları %s konumuna yükle",
"Select or drop files" : "Dosyaları seçin ya da sürükleyip bırakın",
"Uploading files…" : "Dosyalar yükleniyor...",
diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json
index da85ed58f40..b0754cb52a2 100644
--- a/apps/files_sharing/l10n/tr.json
+++ b/apps/files_sharing/l10n/tr.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "paylaşım devre dışı bırakılmış",
"For more info, please ask the person who sent this link." : "Ayrıntılı bilgi almak için bu bağlantıyı aldığınız kişi ile görüşün.",
"shared by %s" : "%s tarafından paylaşıldı",
- "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
"Download" : "İndir",
- "Download %s" : "%s İndir",
"Direct link" : "Doğrudan bağlantı",
+ "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin",
+ "Download %s" : "%s İndir",
"Upload files to %s" : "Dosyaları %s konumuna yükle",
"Select or drop files" : "Dosyaları seçin ya da sürükleyip bırakın",
"Uploading files…" : "Dosyalar yükleniyor...",
diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js
index 3ec4080e94f..2cedc0e2d7b 100644
--- a/apps/files_sharing/l10n/zh_CN.js
+++ b/apps/files_sharing/l10n/zh_CN.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "分享已禁用",
"For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
"shared by %s" : "共享者 %s",
- "Add to your Nextcloud" : "添加到你的 Nextcloud",
"Download" : "下载",
- "Download %s" : "下载 %s",
"Direct link" : "直接链接",
+ "Add to your Nextcloud" : "添加到你的 Nextcloud",
+ "Download %s" : "下载 %s",
"Upload files to %s" : "上传文件到 %s",
"Select or drop files" : "选择或删除文件",
"Uploading files…" : "上传文件 … ",
diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json
index f3da1fbe4ec..2f83b8d0fdc 100644
--- a/apps/files_sharing/l10n/zh_CN.json
+++ b/apps/files_sharing/l10n/zh_CN.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "分享已禁用",
"For more info, please ask the person who sent this link." : "欲知详情,请联系发给你链接的人。",
"shared by %s" : "共享者 %s",
- "Add to your Nextcloud" : "添加到你的 Nextcloud",
"Download" : "下载",
- "Download %s" : "下载 %s",
"Direct link" : "直接链接",
+ "Add to your Nextcloud" : "添加到你的 Nextcloud",
+ "Download %s" : "下载 %s",
"Upload files to %s" : "上传文件到 %s",
"Select or drop files" : "选择或删除文件",
"Uploading files…" : "上传文件 … ",
diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js
index 12444207d04..ff6fbbcb0b2 100644
--- a/apps/files_sharing/l10n/zh_TW.js
+++ b/apps/files_sharing/l10n/zh_TW.js
@@ -102,10 +102,10 @@ OC.L10N.register(
"sharing is disabled" : "分享功能已停用",
"For more info, please ask the person who sent this link." : "請詢問告訴您此連結的人以瞭解更多",
"shared by %s" : "分享自 %s",
- "Add to your Nextcloud" : "加入到您的 Nextcloud",
"Download" : "下載",
- "Download %s" : "下載 %s",
"Direct link" : "直接連結",
+ "Add to your Nextcloud" : "加入到您的 Nextcloud",
+ "Download %s" : "下載 %s",
"Upload files to %s" : "上傳檔案到 %s",
"Select or drop files" : "選擇或拖曳檔案至此",
"Uploading files…" : "上傳檔案中…",
diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json
index 17f98af8d88..4b7c0f05d7b 100644
--- a/apps/files_sharing/l10n/zh_TW.json
+++ b/apps/files_sharing/l10n/zh_TW.json
@@ -100,10 +100,10 @@
"sharing is disabled" : "分享功能已停用",
"For more info, please ask the person who sent this link." : "請詢問告訴您此連結的人以瞭解更多",
"shared by %s" : "分享自 %s",
- "Add to your Nextcloud" : "加入到您的 Nextcloud",
"Download" : "下載",
- "Download %s" : "下載 %s",
"Direct link" : "直接連結",
+ "Add to your Nextcloud" : "加入到您的 Nextcloud",
+ "Download %s" : "下載 %s",
"Upload files to %s" : "上傳檔案到 %s",
"Select or drop files" : "選擇或拖曳檔案至此",
"Uploading files…" : "上傳檔案中…",
diff --git a/apps/files_sharing/lib/Collaboration/ShareRecipientSorter.php b/apps/files_sharing/lib/Collaboration/ShareRecipientSorter.php
new file mode 100644
index 00000000000..db213398118
--- /dev/null
+++ b/apps/files_sharing/lib/Collaboration/ShareRecipientSorter.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\Collaboration;
+
+
+use OCP\Collaboration\AutoComplete\ISorter;
+use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
+use OCP\Files\Node;
+use OCP\IUserSession;
+use OCP\Share\IManager;
+
+class ShareRecipientSorter implements ISorter {
+
+ /** @var IManager */
+ private $shareManager;
+ /** @var Folder */
+ private $rootFolder;
+ /** @var IUserSession */
+ private $userSession;
+
+ public function __construct(IManager $shareManager, IRootFolder $rootFolder, IUserSession $userSession) {
+ $this->shareManager = $shareManager;
+ $this->rootFolder = $rootFolder;
+ $this->userSession = $userSession;
+ }
+
+ public function getId() {
+ return 'share-recipients';
+ }
+
+ public function sort(array &$sortArray, array $context) {
+ // let's be tolerant. Comments uses "files" by default, other usages are often singular
+ if($context['itemType'] !== 'files' && $context['itemType'] !== 'file') {
+ return;
+ }
+ $user = $this->userSession->getUser();
+ if($user === null) {
+ return;
+ }
+ $userFolder = $this->rootFolder->getUserFolder($user->getUID());
+ /** @var Node[] $nodes */
+ $nodes = $userFolder->getById((int)$context['itemId']);
+ if(count($nodes) === 0) {
+ return;
+ }
+ $al = $this->shareManager->getAccessList($nodes[0]);
+
+ foreach ($sortArray as $type => &$byType) {
+ if(!isset($al[$type]) || !is_array($al[$type])) {
+ continue;
+ }
+
+ // at least on PHP 5.6 usort turned out to be not stable. So we add
+ // the current index to the value and compare it on a draw
+ $i = 0;
+ $workArray = array_map(function($element) use (&$i) {
+ return [$i++, $element];
+ }, $byType);
+
+ usort($workArray, function ($a, $b) use ($al, $type) {
+ $result = $this->compare($a[1], $b[1], $al[$type]);
+ if($result === 0) {
+ $result = $a[0] - $b[0];
+ }
+ return $result;
+ });
+
+ // and remove the index values again
+ $byType = array_column($workArray, 1);
+ }
+ }
+
+ /**
+ * @param array $a
+ * @param array $b
+ * @param array $al
+ * @return int
+ */
+ protected function compare(array $a, array $b, array $al) {
+ $a = $a['value']['shareWith'];
+ $b = $b['value']['shareWith'];
+
+ $valueA = (int)in_array($a, $al, true);
+ $valueB = (int)in_array($b, $al, true);
+
+ return $valueB - $valueA;
+ }
+}
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index ed9ad33417a..9c3f4c6afeb 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -373,15 +373,20 @@ class ShareController extends Controller {
$shareTmpl['previewMaxY'] = $this->config->getSystemValue('preview_max_y', 1024);
$shareTmpl['disclaimer'] = $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null);
$shareTmpl['previewURL'] = $shareTmpl['downloadURL'];
+ $ogPreview = '';
if ($shareTmpl['previewSupported']) {
$shareTmpl['previewImage'] = $this->urlGenerator->linkToRouteAbsolute( 'files_sharing.PublicPreview.getPreview',
['x' => 200, 'y' => 200, 'file' => $shareTmpl['directory_path'], 't' => $shareTmpl['dirToken']]);
+ $ogPreview = $shareTmpl['previewImage'];
+
// We just have direct previews for image files
if ($share->getNode()->getMimePart() === 'image') {
$shareTmpl['previewURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.publicpreview.directLink', ['token' => $token]);
+ $ogPreview = $shareTmpl['previewURL'];
}
} else {
$shareTmpl['previewImage'] = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'favicon-fb.png'));
+ $ogPreview = $shareTmpl['previewImage'];
}
// Load files we need
@@ -411,7 +416,7 @@ class ShareController extends Controller {
\OCP\Util::addHeader('meta', ['property' => "og:site_name", 'content' => $this->defaults->getName()]);
\OCP\Util::addHeader('meta', ['property' => "og:url", 'content' => $shareTmpl['shareUrl']]);
\OCP\Util::addHeader('meta', ['property' => "og:type", 'content' => "object"]);
- \OCP\Util::addHeader('meta', ['property' => "og:image", 'content' => $shareTmpl['previewImage']]);
+ \OCP\Util::addHeader('meta', ['property' => "og:image", 'content' => $ogPreview]);
$this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts');
@@ -458,6 +463,10 @@ class ShareController extends Controller {
if ($files_list === null) {
$files_list = [$files];
}
+ // Just in case $files is a single int like '1234'
+ if (!is_array($files_list)) {
+ $files_list = [$files_list];
+ }
}
$userFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 8bbb53fa4e0..5417809b908 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -16,6 +16,7 @@
<input type="hidden" id="isPublic" name="isPublic" value="1">
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<input type="hidden" name="downloadURL" value="<?php p($_['downloadURL']) ?>" id="downloadURL">
+<input type="hidden" name="previewURL" value="<?php p($_['previewURL']) ?>" id="previewURL">
<input type="hidden" name="sharingToken" value="<?php p($_['sharingToken']) ?>" id="sharingToken">
<input type="hidden" name="filename" value="<?php p($_['filename']) ?>" id="filename">
<input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype">
@@ -48,22 +49,38 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
</div>
<div class="header-right">
- <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
- if ($_['server2serversharing']) {
- ?>
- <span id="save" data-protected="<?php p($_['protected']) ?>"
- data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
- <button id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></button>
- <form class="save-form hidden" action="#">
- <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/>
- <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
- </form>
- </span>
- <?php } ?>
- <a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
- <span class="icon icon-download"></span>
- <span id="download-text"><?php p($l->t('Download'))?></span>
- </a>
+ <?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) { ?>
+ <a href="#" id="share-menutoggle" class="menutoggle icon-more-white"><span class="share-menutoggle-text"><?php p($l->t('Download')) ?></span></a>
+ <div id="share-menu" class="popovermenu menu">
+ <ul>
+ <li>
+ <a href="<?php p($_['downloadURL']); ?>" id="download">
+ <span class="icon icon-download"></span>
+ <?php p($l->t('Download'))?>&nbsp;<span class="download-size">(<?php p($_['fileSize']) ?>)</span>
+ </a>
+ </li>
+ <li>
+ <a href="#" id="directLink-container">
+ <span class="icon icon-public"></span>
+ <label for="directLink"><?php p($l->t('Direct link')) ?></label>
+ <input id="directLink" type="text" readonly value="<?php p($_['previewURL']); ?>">
+ </a>
+ </li>
+ <?php if ($_['server2serversharing']) { ?>
+ <li>
+ <a href="#" id="save" data-protected="<?php p($_['protected']) ?>"
+ data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
+ <span class="icon icon-external"></span>
+ <span id="save-button"><?php p($l->t('Add to your Nextcloud')) ?></span>
+ <form class="save-form hidden" action="#">
+ <input type="text" id="remote_address" placeholder="user@yourNextcloud.org"/>
+ <button id="save-button-confirm" class="icon-confirm svg" disabled></button>
+ </form>
+ </a>
+ </li>
+ <?php } ?>
+ </ul>
+ </div>
<?php } ?>
</div>
</div></header>
@@ -84,16 +101,14 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
<!-- Preview frame is filled via JS to support SVG images for modern browsers -->
<div id="imgframe"></div>
<?php endif; ?>
+ <?php if ($_['previewURL'] === $_['downloadURL']): ?>
<div class="directDownload">
<a href="<?php p($_['downloadURL']); ?>" id="downloadFile" class="button">
<span class="icon icon-download"></span>
<?php p($l->t('Download %s', array($_['filename'])))?> (<?php p($_['fileSize']) ?>)
</a>
</div>
- <div class="directLink">
- <label for="directLink"><?php p($l->t('Direct link')) ?></label>
- <input id="directLink" type="text" readonly value="<?php p($_['previewURL']); ?>">
- </div>
+ <?php endif; ?>
<?php endif; ?>
</div>
</div>
diff --git a/apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php b/apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php
new file mode 100644
index 00000000000..8f516788761
--- /dev/null
+++ b/apps/files_sharing/tests/Collaboration/ShareRecipientSorterTest.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\Tests\Collaboration;
+
+
+use OCA\Files_Sharing\Collaboration\ShareRecipientSorter;
+use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
+use OCP\Files\Node;
+use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Share\IManager;
+use Test\TestCase;
+
+class ShareRecipientSorterTest extends TestCase {
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $shareManager;
+ /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */
+ protected $rootFolder;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userSession;
+ /** @var ShareRecipientSorter */
+ protected $sorter;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->shareManager = $this->createMock(IManager::class);
+ $this->rootFolder = $this->createMock(IRootFolder::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+
+ $this->sorter = new ShareRecipientSorter($this->shareManager, $this->rootFolder, $this->userSession);
+ }
+
+ /**
+ * @dataProvider sortDataProvider
+ * @param $data
+ */
+ public function testSort($data) {
+ $node = $this->createMock(Node::class);
+
+ /** @var Folder|\PHPUnit_Framework_MockObject_MockObject $folder */
+ $folder = $this->createMock(Folder::class);
+ $this->rootFolder->expects($this->any())
+ ->method('getUserFolder')
+ ->willReturn($folder);
+
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('yvonne');
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
+ if ($data['context']['itemType'] === 'files') {
+ $folder->expects($this->once())
+ ->method('getById')
+ ->with($data['context']['itemId'])
+ ->willReturn([$node]);
+
+ $this->shareManager->expects($this->once())
+ ->method('getAccessList')
+ ->with($node)
+ ->willReturn($data['accessList']);
+ } else {
+ $folder->expects($this->never())
+ ->method('getById');
+ $this->shareManager->expects($this->never())
+ ->method('getAccessList');
+ }
+
+ $workArray = $data['input'];
+ $this->sorter->sort($workArray, $data['context']);
+
+ $this->assertEquals($data['expected'], $workArray);
+ }
+
+ public function testSortNoNodes() {
+ /** @var Folder|\PHPUnit_Framework_MockObject_MockObject $folder */
+ $folder = $this->createMock(Folder::class);
+ $this->rootFolder->expects($this->any())
+ ->method('getUserFolder')
+ ->willReturn($folder);
+
+ $folder->expects($this->once())
+ ->method('getById')
+ ->willReturn([]);
+
+ $user = $this->createMock(IUser::class);
+ $user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('yvonne');
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
+ $this->shareManager->expects($this->never())
+ ->method('getAccessList');
+
+ $originalArray = [
+ 'users' => [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ]
+ ];
+ $workArray = $originalArray;
+ $this->sorter->sort($workArray, ['itemType' => 'files', 'itemId' => 404]);
+
+ $this->assertEquals($originalArray, $workArray);
+ }
+
+ public function sortDataProvider() {
+ return [[
+ [
+ #0 – sort properly and otherwise keep existing order
+ 'context' => ['itemType' => 'files', 'itemId' => 42],
+ 'accessList' => ['users' => ['celia', 'darius', 'faruk', 'gail'], 'bots' => ['r2-d2']],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'elena']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'r2-d2']],
+ ['value' => ['shareWith' => 'c-3po']],
+ ]
+ ],
+ ],
+ [
+ #1 – no recipients
+ 'context' => ['itemType' => 'files', 'itemId' => 42],
+ 'accessList' => ['users' => false],
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ ],
+ [
+ #2 – unsupported item type
+ 'context' => ['itemType' => 'announcements', 'itemId' => 42],
+ 'accessList' => null, // not needed
+ 'input' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ 'expected' => [
+ 'users' =>
+ [
+ ['value' => ['shareWith' => 'alice']],
+ ['value' => ['shareWith' => 'bob']],
+ ['value' => ['shareWith' => 'celia']],
+ ['value' => ['shareWith' => 'darius']],
+ ['value' => ['shareWith' => 'elena']],
+ ['value' => ['shareWith' => 'faruk']],
+ ['value' => ['shareWith' => 'gail']],
+ ],
+ 'bots' => [
+ ['value' => ['shareWith' => 'c-3po']],
+ ['value' => ['shareWith' => 'r2-d2']],
+ ]
+ ],
+ ],
+ [
+ #3 – no nothing
+ 'context' => ['itemType' => 'files', 'itemId' => 42],
+ 'accessList' => [],
+ 'input' => [],
+ 'expected' => [],
+ ],
+ ]];
+ }
+}
diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js
index ea2f427df75..5b0a78c9c64 100644
--- a/apps/files_sharing/tests/js/shareSpec.js
+++ b/apps/files_sharing/tests/js/shareSpec.js
@@ -145,7 +145,7 @@ describe('OCA.Sharing.Util tests', function() {
}]);
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
- expect($action.find('>span').text().trim()).toEqual('User One');
+ expect($action.find('>span').text().trim()).toEqual('Shared by User One');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
@@ -166,7 +166,7 @@ describe('OCA.Sharing.Util tests', function() {
}]);
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
- expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Two');
+ expect($action.text().trim()).toEqual('Shared with User One Shared with User Two');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
@@ -273,7 +273,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('Group One, Group Two, User One, User Two');
- expect($action.find('>span').text().trim()).toEqual('Shared with Group One, Group Two, User One, User Two');
+ expect($action.text().trim()).toEqual('Shared with Group One Shared with Group Two Shared with User One Shared with User Two');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
@@ -306,7 +306,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('User One, User Three, User Two');
- expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Three, User Two');
+ expect($action.text().trim()).toEqual('Shared with User One Shared with User Three Shared with User Two');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
@@ -362,7 +362,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('User Two');
- expect($action.find('>span').text().trim()).toEqual('User One');
+ expect($action.find('>span').text().trim()).toEqual('Shared by User One');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
@@ -393,7 +393,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).not.toBeDefined();
- expect($action.find('>span').text().trim()).toEqual('User One');
+ expect($action.find('>span').text().trim()).toEqual('Shared by User One');
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
diff --git a/apps/files_trashbin/composer/autoload.php b/apps/files_trashbin/composer/autoload.php
new file mode 100644
index 00000000000..ae6d572163f
--- /dev/null
+++ b/apps/files_trashbin/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles_Trashbin::getLoader();
diff --git a/apps/files_trashbin/composer/composer.json b/apps/files_trashbin/composer/composer.json
new file mode 100644
index 00000000000..c43b78e83ea
--- /dev/null
+++ b/apps/files_trashbin/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files_Trashbin"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files_Trashbin\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files_trashbin/composer/composer/ClassLoader.php b/apps/files_trashbin/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files_trashbin/composer/composer/LICENSE b/apps/files_trashbin/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files_trashbin/composer/composer/autoload_classmap.php b/apps/files_trashbin/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..2e58c7b1c6c
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_classmap.php
@@ -0,0 +1,23 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Trashbin\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Trashbin\\BackgroundJob\\ExpireTrash' => $baseDir . '/../lib/BackgroundJob/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files_Trashbin\\Command\\CleanUp' => $baseDir . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Trashbin\\Command\\Expire' => $baseDir . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Trashbin\\Command\\ExpireTrash' => $baseDir . '/../lib/Command/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Controller\\PreviewController' => $baseDir . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Trashbin\\Events\\MoveToTrashEvent' => $baseDir . '/../lib/Events/MoveToTrashEvent.php',
+ 'OCA\\Files_Trashbin\\Exceptions\\CopyRecursiveException' => $baseDir . '/../lib/Exceptions/CopyRecursiveException.php',
+ 'OCA\\Files_Trashbin\\Expiration' => $baseDir . '/../lib/Expiration.php',
+ 'OCA\\Files_Trashbin\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\Files_Trashbin\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Files_Trashbin\\Storage' => $baseDir . '/../lib/Storage.php',
+ 'OCA\\Files_Trashbin\\Trashbin' => $baseDir . '/../lib/Trashbin.php',
+);
diff --git a/apps/files_trashbin/composer/composer/autoload_namespaces.php b/apps/files_trashbin/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files_trashbin/composer/composer/autoload_psr4.php b/apps/files_trashbin/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..f7585c671e1
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Trashbin\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files_trashbin/composer/composer/autoload_real.php b/apps/files_trashbin/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..b2abf10922c
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles_Trashbin
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles_Trashbin', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles_Trashbin', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles_Trashbin::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files_trashbin/composer/composer/autoload_static.php b/apps/files_trashbin/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..01520e2d14d
--- /dev/null
+++ b/apps/files_trashbin/composer/composer/autoload_static.php
@@ -0,0 +1,49 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles_Trashbin
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files_Trashbin\\' => 19,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files_Trashbin\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files_Trashbin\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Trashbin\\BackgroundJob\\ExpireTrash' => __DIR__ . '/..' . '/../lib/BackgroundJob/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files_Trashbin\\Command\\CleanUp' => __DIR__ . '/..' . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Trashbin\\Command\\Expire' => __DIR__ . '/..' . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Trashbin\\Command\\ExpireTrash' => __DIR__ . '/..' . '/../lib/Command/ExpireTrash.php',
+ 'OCA\\Files_Trashbin\\Controller\\PreviewController' => __DIR__ . '/..' . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Trashbin\\Events\\MoveToTrashEvent' => __DIR__ . '/..' . '/../lib/Events/MoveToTrashEvent.php',
+ 'OCA\\Files_Trashbin\\Exceptions\\CopyRecursiveException' => __DIR__ . '/..' . '/../lib/Exceptions/CopyRecursiveException.php',
+ 'OCA\\Files_Trashbin\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php',
+ 'OCA\\Files_Trashbin\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\Files_Trashbin\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Files_Trashbin\\Storage' => __DIR__ . '/..' . '/../lib/Storage.php',
+ 'OCA\\Files_Trashbin\\Trashbin' => __DIR__ . '/..' . '/../lib/Trashbin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles_Trashbin::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles_Trashbin::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles_Trashbin::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files_trashbin/l10n/es_CR.js b/apps/files_trashbin/l10n/es_CR.js
new file mode 100644
index 00000000000..24cc0e4083e
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_CR.js
@@ -0,0 +1,21 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
+ "Error" : "Error",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, por favor verifica las bitácoras o contacta al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Podrás recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Name" : "Nombre",
+ "Deleted" : "Borrado"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/es_CR.json b/apps/files_trashbin/l10n/es_CR.json
new file mode 100644
index 00000000000..3a539073e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_CR.json
@@ -0,0 +1,19 @@
+{ "translations": {
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
+ "Error" : "Error",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, por favor verifica las bitácoras o contacta al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Podrás recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Name" : "Nombre",
+ "Deleted" : "Borrado"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/es_DO.js b/apps/files_trashbin/l10n/es_DO.js
new file mode 100644
index 00000000000..24cc0e4083e
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_DO.js
@@ -0,0 +1,21 @@
+OC.L10N.register(
+ "files_trashbin",
+ {
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
+ "Error" : "Error",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, por favor verifica las bitácoras o contacta al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Podrás recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Name" : "Nombre",
+ "Deleted" : "Borrado"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/es_DO.json b/apps/files_trashbin/l10n/es_DO.json
new file mode 100644
index 00000000000..3a539073e8b
--- /dev/null
+++ b/apps/files_trashbin/l10n/es_DO.json
@@ -0,0 +1,19 @@
+{ "translations": {
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
+ "Error" : "Error",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, por favor verifica las bitácoras o contacta al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Podrás recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
+ "Name" : "Nombre",
+ "Deleted" : "Borrado"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_versions/composer/autoload.php b/apps/files_versions/composer/autoload.php
new file mode 100644
index 00000000000..7bb72360fba
--- /dev/null
+++ b/apps/files_versions/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitFiles_Versions::getLoader();
diff --git a/apps/files_versions/composer/composer.json b/apps/files_versions/composer/composer.json
new file mode 100644
index 00000000000..fdad5a69ddb
--- /dev/null
+++ b/apps/files_versions/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Files_Versions"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Files_Versions\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/files_versions/composer/composer/ClassLoader.php b/apps/files_versions/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/files_versions/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/files_versions/composer/composer/LICENSE b/apps/files_versions/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/files_versions/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/files_versions/composer/composer/autoload_classmap.php b/apps/files_versions/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..05dad7f7c5f
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_classmap.php
@@ -0,0 +1,20 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Versions\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Versions\\BackgroundJob\\ExpireVersions' => $baseDir . '/../lib/BackgroundJob/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\Files_Versions\\Command\\CleanUp' => $baseDir . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Versions\\Command\\Expire' => $baseDir . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Versions\\Command\\ExpireVersions' => $baseDir . '/../lib/Command/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Controller\\PreviewController' => $baseDir . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => $baseDir . '/../lib/Events/CreateVersionEvent.php',
+ 'OCA\\Files_Versions\\Expiration' => $baseDir . '/../lib/Expiration.php',
+ 'OCA\\Files_Versions\\Hooks' => $baseDir . '/../lib/Hooks.php',
+ 'OCA\\Files_Versions\\Storage' => $baseDir . '/../lib/Storage.php',
+);
diff --git a/apps/files_versions/composer/composer/autoload_namespaces.php b/apps/files_versions/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/files_versions/composer/composer/autoload_psr4.php b/apps/files_versions/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..09bc4395cfd
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Files_Versions\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/files_versions/composer/composer/autoload_real.php b/apps/files_versions/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..8479a1f199b
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitFiles_Versions
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitFiles_Versions', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitFiles_Versions', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitFiles_Versions::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/files_versions/composer/composer/autoload_static.php b/apps/files_versions/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..9ac3b049030
--- /dev/null
+++ b/apps/files_versions/composer/composer/autoload_static.php
@@ -0,0 +1,46 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitFiles_Versions
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Files_Versions\\' => 19,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Files_Versions\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Files_Versions\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Files_Versions\\BackgroundJob\\ExpireVersions' => __DIR__ . '/..' . '/../lib/BackgroundJob/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\Files_Versions\\Command\\CleanUp' => __DIR__ . '/..' . '/../lib/Command/CleanUp.php',
+ 'OCA\\Files_Versions\\Command\\Expire' => __DIR__ . '/..' . '/../lib/Command/Expire.php',
+ 'OCA\\Files_Versions\\Command\\ExpireVersions' => __DIR__ . '/..' . '/../lib/Command/ExpireVersions.php',
+ 'OCA\\Files_Versions\\Controller\\PreviewController' => __DIR__ . '/..' . '/../lib/Controller/PreviewController.php',
+ 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => __DIR__ . '/..' . '/../lib/Events/CreateVersionEvent.php',
+ 'OCA\\Files_Versions\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php',
+ 'OCA\\Files_Versions\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
+ 'OCA\\Files_Versions\\Storage' => __DIR__ . '/..' . '/../lib/Storage.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitFiles_Versions::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitFiles_Versions::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitFiles_Versions::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/files_versions/l10n/es_CR.js b/apps/files_versions/l10n/es_CR.js
new file mode 100644
index 00000000000..7cfb569dec7
--- /dev/null
+++ b/apps/files_versions/l10n/es_CR.js
@@ -0,0 +1,14 @@
+OC.L10N.register(
+ "files_versions",
+ {
+ "Could not revert: %s" : "No fue posible revertir: %s",
+ "Versions" : "Versiones",
+ "Failed to revert {file} to revision {timestamp}." : "Falla al revertir {file} a revisión {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Restore" : "Restaurar",
+ "No earlier versions available" : "No hay versiones anteriores disponibles",
+ "More versions …" : "Más versiones ...",
+ "No versions available" : "No hay versiones disponibles",
+ "More versions..." : "Más versiones..."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/es_CR.json b/apps/files_versions/l10n/es_CR.json
new file mode 100644
index 00000000000..e346d38166f
--- /dev/null
+++ b/apps/files_versions/l10n/es_CR.json
@@ -0,0 +1,12 @@
+{ "translations": {
+ "Could not revert: %s" : "No fue posible revertir: %s",
+ "Versions" : "Versiones",
+ "Failed to revert {file} to revision {timestamp}." : "Falla al revertir {file} a revisión {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Restore" : "Restaurar",
+ "No earlier versions available" : "No hay versiones anteriores disponibles",
+ "More versions …" : "Más versiones ...",
+ "No versions available" : "No hay versiones disponibles",
+ "More versions..." : "Más versiones..."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_versions/l10n/es_DO.js b/apps/files_versions/l10n/es_DO.js
new file mode 100644
index 00000000000..7cfb569dec7
--- /dev/null
+++ b/apps/files_versions/l10n/es_DO.js
@@ -0,0 +1,14 @@
+OC.L10N.register(
+ "files_versions",
+ {
+ "Could not revert: %s" : "No fue posible revertir: %s",
+ "Versions" : "Versiones",
+ "Failed to revert {file} to revision {timestamp}." : "Falla al revertir {file} a revisión {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Restore" : "Restaurar",
+ "No earlier versions available" : "No hay versiones anteriores disponibles",
+ "More versions …" : "Más versiones ...",
+ "No versions available" : "No hay versiones disponibles",
+ "More versions..." : "Más versiones..."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/es_DO.json b/apps/files_versions/l10n/es_DO.json
new file mode 100644
index 00000000000..e346d38166f
--- /dev/null
+++ b/apps/files_versions/l10n/es_DO.json
@@ -0,0 +1,12 @@
+{ "translations": {
+ "Could not revert: %s" : "No fue posible revertir: %s",
+ "Versions" : "Versiones",
+ "Failed to revert {file} to revision {timestamp}." : "Falla al revertir {file} a revisión {timestamp}.",
+ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "Restore" : "Restaurar",
+ "No earlier versions available" : "No hay versiones anteriores disponibles",
+ "More versions …" : "Más versiones ...",
+ "No versions available" : "No hay versiones disponibles",
+ "More versions..." : "Más versiones..."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_versions/l10n/eu.js b/apps/files_versions/l10n/eu.js
index bae93e00f6b..2a6bafa1cf8 100644
--- a/apps/files_versions/l10n/eu.js
+++ b/apps/files_versions/l10n/eu.js
@@ -5,7 +5,9 @@ OC.L10N.register(
"Versions" : "Bertsioak",
"Failed to revert {file} to revision {timestamp}." : "Errore bat izan da {fitxategia} {timestamp} bertsiora leheneratzean.",
"Restore" : "Berrezarri",
- "More versions..." : "Bertsio gehiago...",
- "No other versions available" : "Ez dago bertsio gehiago eskuragarri"
+ "No earlier versions available" : "Ez dago aurreko bertsiorik",
+ "More versions …" : "Bertsio gehiago...",
+ "No versions available" : "Ez dago bertsiorik eskuragarri",
+ "More versions..." : "Bertsio gehiago..."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_versions/l10n/eu.json b/apps/files_versions/l10n/eu.json
index 70cf27f6562..c79af7797c8 100644
--- a/apps/files_versions/l10n/eu.json
+++ b/apps/files_versions/l10n/eu.json
@@ -3,7 +3,9 @@
"Versions" : "Bertsioak",
"Failed to revert {file} to revision {timestamp}." : "Errore bat izan da {fitxategia} {timestamp} bertsiora leheneratzean.",
"Restore" : "Berrezarri",
- "More versions..." : "Bertsio gehiago...",
- "No other versions available" : "Ez dago bertsio gehiago eskuragarri"
+ "No earlier versions available" : "Ez dago aurreko bertsiorik",
+ "More versions …" : "Bertsio gehiago...",
+ "No versions available" : "Ez dago bertsiorik eskuragarri",
+ "More versions..." : "Bertsio gehiago..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_versions/l10n/sk.js b/apps/files_versions/l10n/sk.js
index b851f680f4f..41c13cd4c18 100644
--- a/apps/files_versions/l10n/sk.js
+++ b/apps/files_versions/l10n/sk.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajtov","%n bajtov"],
"Restore" : "Obnoviť",
+ "No earlier versions available" : "Nie sú dostupné predchádzajúce verzie",
+ "More versions …" : "Viac verzií ...",
"No versions available" : "Žiadne verzie nie sú dostupné",
"More versions..." : "Viac verzií..."
},
diff --git a/apps/files_versions/l10n/sk.json b/apps/files_versions/l10n/sk.json
index 8efc13112a7..c66d5b0c7c0 100644
--- a/apps/files_versions/l10n/sk.json
+++ b/apps/files_versions/l10n/sk.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajtov","%n bajtov"],
"Restore" : "Obnoviť",
+ "No earlier versions available" : "Nie sú dostupné predchádzajúce verzie",
+ "More versions …" : "Viac verzií ...",
"No versions available" : "Žiadne verzie nie sú dostupné",
"More versions..." : "Viac verzií..."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
diff --git a/apps/lookup_server_connector/composer/autoload.php b/apps/lookup_server_connector/composer/autoload.php
new file mode 100644
index 00000000000..ab8f4ce80ff
--- /dev/null
+++ b/apps/lookup_server_connector/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitLookupServerConnector::getLoader();
diff --git a/apps/lookup_server_connector/composer/composer.json b/apps/lookup_server_connector/composer/composer.json
new file mode 100644
index 00000000000..5ff3be7e18b
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "LookupServerConnector"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\LookupServerConnector\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/lookup_server_connector/composer/composer/ClassLoader.php b/apps/lookup_server_connector/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/lookup_server_connector/composer/composer/LICENSE b/apps/lookup_server_connector/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/lookup_server_connector/composer/composer/autoload_classmap.php b/apps/lookup_server_connector/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..110eff058ff
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_classmap.php
@@ -0,0 +1,11 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\LookupServerConnector\\BackgroundJobs\\RetryJob' => $baseDir . '/../lib/BackgroundJobs/RetryJob.php',
+ 'OCA\\LookupServerConnector\\UpdateLookupServer' => $baseDir . '/../lib/UpdateLookupServer.php',
+);
diff --git a/apps/lookup_server_connector/composer/composer/autoload_namespaces.php b/apps/lookup_server_connector/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/lookup_server_connector/composer/composer/autoload_psr4.php b/apps/lookup_server_connector/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..1532b4d9c52
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\LookupServerConnector\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/lookup_server_connector/composer/composer/autoload_real.php b/apps/lookup_server_connector/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..92627f9dfaa
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitLookupServerConnector
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitLookupServerConnector', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitLookupServerConnector', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitLookupServerConnector::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/lookup_server_connector/composer/composer/autoload_static.php b/apps/lookup_server_connector/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..07aca539b3f
--- /dev/null
+++ b/apps/lookup_server_connector/composer/composer/autoload_static.php
@@ -0,0 +1,37 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitLookupServerConnector
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\LookupServerConnector\\' => 26,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\LookupServerConnector\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\LookupServerConnector\\BackgroundJobs\\RetryJob' => __DIR__ . '/..' . '/../lib/BackgroundJobs/RetryJob.php',
+ 'OCA\\LookupServerConnector\\UpdateLookupServer' => __DIR__ . '/..' . '/../lib/UpdateLookupServer.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitLookupServerConnector::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitLookupServerConnector::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitLookupServerConnector::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/oauth2/composer/autoload.php b/apps/oauth2/composer/autoload.php
new file mode 100644
index 00000000000..276dedf42c2
--- /dev/null
+++ b/apps/oauth2/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitOAuth2::getLoader();
diff --git a/apps/oauth2/composer/composer.json b/apps/oauth2/composer/composer.json
new file mode 100644
index 00000000000..95fe2e1604e
--- /dev/null
+++ b/apps/oauth2/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "OAuth2"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\OAuth2\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/oauth2/composer/composer/ClassLoader.php b/apps/oauth2/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/oauth2/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/oauth2/composer/composer/LICENSE b/apps/oauth2/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/oauth2/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/oauth2/composer/composer/autoload_classmap.php b/apps/oauth2/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..97c8098caa3
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_classmap.php
@@ -0,0 +1,19 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\OAuth2\\Controller\\LoginRedirectorController' => $baseDir . '/../lib/Controller/LoginRedirectorController.php',
+ 'OCA\\OAuth2\\Controller\\OauthApiController' => $baseDir . '/../lib/Controller/OauthApiController.php',
+ 'OCA\\OAuth2\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\OAuth2\\Db\\AccessToken' => $baseDir . '/../lib/Db/AccessToken.php',
+ 'OCA\\OAuth2\\Db\\AccessTokenMapper' => $baseDir . '/../lib/Db/AccessTokenMapper.php',
+ 'OCA\\OAuth2\\Db\\Client' => $baseDir . '/../lib/Db/Client.php',
+ 'OCA\\OAuth2\\Db\\ClientMapper' => $baseDir . '/../lib/Db/ClientMapper.php',
+ 'OCA\\OAuth2\\Exceptions\\AccessTokenNotFoundException' => $baseDir . '/../lib/Exceptions/AccessTokenNotFoundException.php',
+ 'OCA\\OAuth2\\Exceptions\\ClientNotFoundException' => $baseDir . '/../lib/Exceptions/ClientNotFoundException.php',
+ 'OCA\\OAuth2\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+);
diff --git a/apps/oauth2/composer/composer/autoload_namespaces.php b/apps/oauth2/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/oauth2/composer/composer/autoload_psr4.php b/apps/oauth2/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..1164638c634
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\OAuth2\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/oauth2/composer/composer/autoload_real.php b/apps/oauth2/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..855ff3261b3
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitOAuth2
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitOAuth2', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitOAuth2', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitOAuth2::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/oauth2/composer/composer/autoload_static.php b/apps/oauth2/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..ec48d6d0ce0
--- /dev/null
+++ b/apps/oauth2/composer/composer/autoload_static.php
@@ -0,0 +1,45 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitOAuth2
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\OAuth2\\' => 11,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\OAuth2\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\OAuth2\\Controller\\LoginRedirectorController' => __DIR__ . '/..' . '/../lib/Controller/LoginRedirectorController.php',
+ 'OCA\\OAuth2\\Controller\\OauthApiController' => __DIR__ . '/..' . '/../lib/Controller/OauthApiController.php',
+ 'OCA\\OAuth2\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\OAuth2\\Db\\AccessToken' => __DIR__ . '/..' . '/../lib/Db/AccessToken.php',
+ 'OCA\\OAuth2\\Db\\AccessTokenMapper' => __DIR__ . '/..' . '/../lib/Db/AccessTokenMapper.php',
+ 'OCA\\OAuth2\\Db\\Client' => __DIR__ . '/..' . '/../lib/Db/Client.php',
+ 'OCA\\OAuth2\\Db\\ClientMapper' => __DIR__ . '/..' . '/../lib/Db/ClientMapper.php',
+ 'OCA\\OAuth2\\Exceptions\\AccessTokenNotFoundException' => __DIR__ . '/..' . '/../lib/Exceptions/AccessTokenNotFoundException.php',
+ 'OCA\\OAuth2\\Exceptions\\ClientNotFoundException' => __DIR__ . '/..' . '/../lib/Exceptions/ClientNotFoundException.php',
+ 'OCA\\OAuth2\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitOAuth2::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitOAuth2::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitOAuth2::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/oauth2/l10n/es_CR.js b/apps/oauth2/l10n/es_CR.js
new file mode 100644
index 00000000000..ecad08fd552
--- /dev/null
+++ b/apps/oauth2/l10n/es_CR.js
@@ -0,0 +1,13 @@
+OC.L10N.register(
+ "oauth2",
+ {
+ "OAuth 2.0 clients" : "Clientes OAuth 2.0",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 le permite a los servicios externos solicitar acceso a %s.",
+ "Name" : "Nombre",
+ "Redirection URI" : "URI para redirección",
+ "Client Identifier" : "Identificador del cliente",
+ "Secret" : "Secreto",
+ "Add client" : "Agregar cliente",
+ "Add" : "Agregar"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/oauth2/l10n/es_CR.json b/apps/oauth2/l10n/es_CR.json
new file mode 100644
index 00000000000..5e42b16f40d
--- /dev/null
+++ b/apps/oauth2/l10n/es_CR.json
@@ -0,0 +1,11 @@
+{ "translations": {
+ "OAuth 2.0 clients" : "Clientes OAuth 2.0",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 le permite a los servicios externos solicitar acceso a %s.",
+ "Name" : "Nombre",
+ "Redirection URI" : "URI para redirección",
+ "Client Identifier" : "Identificador del cliente",
+ "Secret" : "Secreto",
+ "Add client" : "Agregar cliente",
+ "Add" : "Agregar"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/oauth2/l10n/es_DO.js b/apps/oauth2/l10n/es_DO.js
new file mode 100644
index 00000000000..ecad08fd552
--- /dev/null
+++ b/apps/oauth2/l10n/es_DO.js
@@ -0,0 +1,13 @@
+OC.L10N.register(
+ "oauth2",
+ {
+ "OAuth 2.0 clients" : "Clientes OAuth 2.0",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 le permite a los servicios externos solicitar acceso a %s.",
+ "Name" : "Nombre",
+ "Redirection URI" : "URI para redirección",
+ "Client Identifier" : "Identificador del cliente",
+ "Secret" : "Secreto",
+ "Add client" : "Agregar cliente",
+ "Add" : "Agregar"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/oauth2/l10n/es_DO.json b/apps/oauth2/l10n/es_DO.json
new file mode 100644
index 00000000000..5e42b16f40d
--- /dev/null
+++ b/apps/oauth2/l10n/es_DO.json
@@ -0,0 +1,11 @@
+{ "translations": {
+ "OAuth 2.0 clients" : "Clientes OAuth 2.0",
+ "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 le permite a los servicios externos solicitar acceso a %s.",
+ "Name" : "Nombre",
+ "Redirection URI" : "URI para redirección",
+ "Client Identifier" : "Identificador del cliente",
+ "Secret" : "Secreto",
+ "Add client" : "Agregar cliente",
+ "Add" : "Agregar"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/composer/autoload.php b/apps/provisioning_api/composer/autoload.php
new file mode 100644
index 00000000000..9734ee42b19
--- /dev/null
+++ b/apps/provisioning_api/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitProvisioning_API::getLoader();
diff --git a/apps/provisioning_api/composer/composer.json b/apps/provisioning_api/composer/composer.json
new file mode 100644
index 00000000000..ea2a43abc8e
--- /dev/null
+++ b/apps/provisioning_api/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Provisioning_API"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Provisioning_API\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/provisioning_api/composer/composer/ClassLoader.php b/apps/provisioning_api/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/provisioning_api/composer/composer/LICENSE b/apps/provisioning_api/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/provisioning_api/composer/composer/autoload_classmap.php b/apps/provisioning_api/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..1ae8ef27d03
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_classmap.php
@@ -0,0 +1,16 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Provisioning_API\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Provisioning_API\\Controller\\AppConfigController' => $baseDir . '/../lib/Controller/AppConfigController.php',
+ 'OCA\\Provisioning_API\\Controller\\AppsController' => $baseDir . '/../lib/Controller/AppsController.php',
+ 'OCA\\Provisioning_API\\Controller\\GroupsController' => $baseDir . '/../lib/Controller/GroupsController.php',
+ 'OCA\\Provisioning_API\\Controller\\UsersController' => $baseDir . '/../lib/Controller/UsersController.php',
+ 'OCA\\Provisioning_API\\Middleware\\Exceptions\\NotSubAdminException' => $baseDir . '/../lib/Middleware/Exceptions/NotSubAdminException.php',
+ 'OCA\\Provisioning_API\\Middleware\\ProvisioningApiMiddleware' => $baseDir . '/../lib/Middleware/ProvisioningApiMiddleware.php',
+);
diff --git a/apps/provisioning_api/composer/composer/autoload_namespaces.php b/apps/provisioning_api/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/provisioning_api/composer/composer/autoload_psr4.php b/apps/provisioning_api/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..46b5eb003d5
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Provisioning_API\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/provisioning_api/composer/composer/autoload_real.php b/apps/provisioning_api/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..c55cebd2f63
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitProvisioning_API
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitProvisioning_API', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitProvisioning_API', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitProvisioning_API::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/provisioning_api/composer/composer/autoload_static.php b/apps/provisioning_api/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..950a851eae9
--- /dev/null
+++ b/apps/provisioning_api/composer/composer/autoload_static.php
@@ -0,0 +1,42 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitProvisioning_API
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Provisioning_API\\' => 21,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Provisioning_API\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Provisioning_API\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Provisioning_API\\Controller\\AppConfigController' => __DIR__ . '/..' . '/../lib/Controller/AppConfigController.php',
+ 'OCA\\Provisioning_API\\Controller\\AppsController' => __DIR__ . '/..' . '/../lib/Controller/AppsController.php',
+ 'OCA\\Provisioning_API\\Controller\\GroupsController' => __DIR__ . '/..' . '/../lib/Controller/GroupsController.php',
+ 'OCA\\Provisioning_API\\Controller\\UsersController' => __DIR__ . '/..' . '/../lib/Controller/UsersController.php',
+ 'OCA\\Provisioning_API\\Middleware\\Exceptions\\NotSubAdminException' => __DIR__ . '/..' . '/../lib/Middleware/Exceptions/NotSubAdminException.php',
+ 'OCA\\Provisioning_API\\Middleware\\ProvisioningApiMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/ProvisioningApiMiddleware.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitProvisioning_API::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitProvisioning_API::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitProvisioning_API::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/sharebymail/composer/autoload.php b/apps/sharebymail/composer/autoload.php
new file mode 100644
index 00000000000..da43a4ff256
--- /dev/null
+++ b/apps/sharebymail/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitShareByMail::getLoader();
diff --git a/apps/sharebymail/composer/composer.json b/apps/sharebymail/composer/composer.json
new file mode 100644
index 00000000000..3e7359c114a
--- /dev/null
+++ b/apps/sharebymail/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "ShareByMail"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\ShareByMail\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/sharebymail/composer/composer/ClassLoader.php b/apps/sharebymail/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/sharebymail/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/sharebymail/composer/composer/LICENSE b/apps/sharebymail/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/sharebymail/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/sharebymail/composer/composer/autoload_classmap.php b/apps/sharebymail/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..0df9428d7b0
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_classmap.php
@@ -0,0 +1,16 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\ShareByMail\\Activity' => $baseDir . '/../lib/Activity.php',
+ 'OCA\\ShareByMail\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\ShareByMail\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
+ 'OCA\\ShareByMail\\Settings' => $baseDir . '/../lib/Settings.php',
+ 'OCA\\ShareByMail\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\ShareByMail\\Settings\\SettingsManager' => $baseDir . '/../lib/Settings/SettingsManager.php',
+ 'OCA\\ShareByMail\\ShareByMailProvider' => $baseDir . '/../lib/ShareByMailProvider.php',
+);
diff --git a/apps/sharebymail/composer/composer/autoload_namespaces.php b/apps/sharebymail/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/sharebymail/composer/composer/autoload_psr4.php b/apps/sharebymail/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..15fee669450
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\ShareByMail\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/sharebymail/composer/composer/autoload_real.php b/apps/sharebymail/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..b03d256defe
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitShareByMail
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitShareByMail', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitShareByMail', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitShareByMail::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/sharebymail/composer/composer/autoload_static.php b/apps/sharebymail/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..273da60be64
--- /dev/null
+++ b/apps/sharebymail/composer/composer/autoload_static.php
@@ -0,0 +1,42 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitShareByMail
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\ShareByMail\\' => 16,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\ShareByMail\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\ShareByMail\\Activity' => __DIR__ . '/..' . '/../lib/Activity.php',
+ 'OCA\\ShareByMail\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\ShareByMail\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
+ 'OCA\\ShareByMail\\Settings' => __DIR__ . '/..' . '/../lib/Settings.php',
+ 'OCA\\ShareByMail\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\ShareByMail\\Settings\\SettingsManager' => __DIR__ . '/..' . '/../lib/Settings/SettingsManager.php',
+ 'OCA\\ShareByMail\\ShareByMailProvider' => __DIR__ . '/..' . '/../lib/ShareByMailProvider.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitShareByMail::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitShareByMail::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitShareByMail::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/sharebymail/l10n/es_CR.js b/apps/sharebymail/l10n/es_CR.js
new file mode 100644
index 00000000000..92f61e8f63e
--- /dev/null
+++ b/apps/sharebymail/l10n/es_CR.js
@@ -0,0 +1,50 @@
+OC.L10N.register(
+ "sharebymail",
+ {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "La contraseña para el elemento compartido fue enviada a %1$s",
+ "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}",
+ "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado",
+ "You shared %1$s with %2$s by mail" : "Compartiste %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartió %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo",
+ "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s",
+ "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}",
+ "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se te ha enviado",
+ "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarte la contraseña auto-generada. Por favor establece una dirección de correo electrónico váilida en tus configuraciones personales y vuelve a intentarlo.",
+ "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s ha compartido »%s« contigo",
+ "Click the button below to open it." : "Haz click en el botón de abajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s vía %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« contigo.\nDeberías haber recibido ya un correo por separado con la liga para accederlo. \n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« contigo. Ya deberías haber recibido un correo aparte con la liga para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %s ",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
+ "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %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." : "Acabas de compartir »%s« con %s. El elemento compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %s cada elelento compartido debe ser protegido por una contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto necesitas reenviar la contaseña manualmente al destinatario. ",
+ "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %s",
+ "This is the password: %s" : "Esta es la contraseña: %s",
+ "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ",
+ "Send password by mail" : "La contraseña ha sido enviada por correo",
+ "Enforce password protection" : "Forzar protección con contraseña",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« contigo a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> contigo a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> contigo.<br><br> "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/es_CR.json b/apps/sharebymail/l10n/es_CR.json
new file mode 100644
index 00000000000..43a4bc87eb2
--- /dev/null
+++ b/apps/sharebymail/l10n/es_CR.json
@@ -0,0 +1,48 @@
+{ "translations": {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "Password for mail share sent to %1$s" : "La contraseña para el elemento compartido fue enviada a %1$s",
+ "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}",
+ "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado",
+ "You shared %1$s with %2$s by mail" : "Compartiste %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s compartió %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo",
+ "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s",
+ "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}",
+ "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se te ha enviado",
+ "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarte la contraseña auto-generada. Por favor establece una dirección de correo electrónico váilida en tus configuraciones personales y vuelve a intentarlo.",
+ "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s ha compartido »%s« contigo",
+ "Click the button below to open it." : "Haz click en el botón de abajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s vía %s",
+ "%s shared »%s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%s compartió »%s« contigo.\nDeberías haber recibido ya un correo por separado con la liga para accederlo. \n",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« contigo. Ya deberías haber recibido un correo aparte con la liga para accederlo. ",
+ "Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido contigo por %s ",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
+ "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %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." : "Acabas de compartir »%s« con %s. El elemento compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %s cada elelento compartido debe ser protegido por una contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto necesitas reenviar la contaseña manualmente al destinatario. ",
+ "Password to access »%s« shared with %s" : "La contraseña para acceder »%s« ha sido compartida con %s",
+ "This is the password: %s" : "Esta es la contraseña: %s",
+ "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Share by mail" : "Compartir por correo",
+ "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ",
+ "Send password by mail" : "La contraseña ha sido enviada por correo",
+ "Enforce password protection" : "Forzar protección con contraseña",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« contigo a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« contigo.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> contigo a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> contigo.<br><br> "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/systemtags/composer/autoload.php b/apps/systemtags/composer/autoload.php
new file mode 100644
index 00000000000..30f4cd27d40
--- /dev/null
+++ b/apps/systemtags/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitSystemTags::getLoader();
diff --git a/apps/systemtags/composer/composer.json b/apps/systemtags/composer/composer.json
new file mode 100644
index 00000000000..06b4e7f1df4
--- /dev/null
+++ b/apps/systemtags/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "SystemTags"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\SystemTags\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/systemtags/composer/composer/ClassLoader.php b/apps/systemtags/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/systemtags/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/systemtags/composer/composer/LICENSE b/apps/systemtags/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/systemtags/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/systemtags/composer/composer/autoload_classmap.php b/apps/systemtags/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..9bf1f0cdaa4
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_classmap.php
@@ -0,0 +1,14 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\SystemTags\\Activity\\Listener' => $baseDir . '/../lib/Activity/Listener.php',
+ 'OCA\\SystemTags\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\SystemTags\\Activity\\Setting' => $baseDir . '/../lib/Activity/Setting.php',
+ 'OCA\\SystemTags\\Controller\\LastUsedController' => $baseDir . '/../lib/Controller/LastUsedController.php',
+ 'OCA\\SystemTags\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+);
diff --git a/apps/systemtags/composer/composer/autoload_namespaces.php b/apps/systemtags/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/systemtags/composer/composer/autoload_psr4.php b/apps/systemtags/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..cec8aaf3650
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\SystemTags\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/systemtags/composer/composer/autoload_real.php b/apps/systemtags/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..a085cdeb46d
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitSystemTags
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitSystemTags', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitSystemTags', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitSystemTags::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/systemtags/composer/composer/autoload_static.php b/apps/systemtags/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..40615430f93
--- /dev/null
+++ b/apps/systemtags/composer/composer/autoload_static.php
@@ -0,0 +1,40 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitSystemTags
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\SystemTags\\' => 15,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\SystemTags\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\SystemTags\\Activity\\Listener' => __DIR__ . '/..' . '/../lib/Activity/Listener.php',
+ 'OCA\\SystemTags\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\SystemTags\\Activity\\Setting' => __DIR__ . '/..' . '/../lib/Activity/Setting.php',
+ 'OCA\\SystemTags\\Controller\\LastUsedController' => __DIR__ . '/..' . '/../lib/Controller/LastUsedController.php',
+ 'OCA\\SystemTags\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitSystemTags::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitSystemTags::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitSystemTags::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/systemtags/l10n/es_CR.js b/apps/systemtags/l10n/es_CR.js
new file mode 100644
index 00000000000..77f45fe1268
--- /dev/null
+++ b/apps/systemtags/l10n/es_CR.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "systemtags",
+ {
+ "Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Selecciona las etiquetas del filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Por favor selecciona las etiquetas del filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Etiqueta del sistema %1$s eliminada",
+ "Removed system tag {systemtag}" : "Eliminó la etiqueta del sistema {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Creaste la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Creaste la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Borraste la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Borraste la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Actualizaste la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Actualizaste la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Agregaste la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Agregaste la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Eliminaste la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Eliminaste la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ",
+ "Select tag …" : "Seleccionar etiqueta ...",
+ "Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/systemtags/l10n/es_CR.json b/apps/systemtags/l10n/es_CR.json
new file mode 100644
index 00000000000..9a8e4adf3f8
--- /dev/null
+++ b/apps/systemtags/l10n/es_CR.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Selecciona las etiquetas del filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Por favor selecciona las etiquetas del filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Etiqueta del sistema %1$s eliminada",
+ "Removed system tag {systemtag}" : "Eliminó la etiqueta del sistema {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Creaste la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Creaste la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Borraste la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Borraste la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Actualizaste la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Actualizaste la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Agregaste la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Agregaste la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Eliminaste la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Eliminaste la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ",
+ "Select tag …" : "Seleccionar etiqueta ...",
+ "Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Size" : "Tamaño",
+ "Modified" : "Modificado"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/testing/composer/autoload.php b/apps/testing/composer/autoload.php
new file mode 100644
index 00000000000..dc2a7034ffa
--- /dev/null
+++ b/apps/testing/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitTesting::getLoader();
diff --git a/apps/testing/composer/composer.json b/apps/testing/composer/composer.json
new file mode 100644
index 00000000000..4cee66ac094
--- /dev/null
+++ b/apps/testing/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "Testing"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\Testing\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/testing/composer/composer/ClassLoader.php b/apps/testing/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/testing/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/testing/composer/composer/LICENSE b/apps/testing/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/testing/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/testing/composer/composer/autoload_classmap.php b/apps/testing/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..ce8f4948cad
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_classmap.php
@@ -0,0 +1,15 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Testing\\AlternativeHomeUserBackend' => $baseDir . '/../lib/AlternativeHomeUserBackend.php',
+ 'OCA\\Testing\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\Testing\\Controller\\ConfigController' => $baseDir . '/../lib/Controller/ConfigController.php',
+ 'OCA\\Testing\\Controller\\LockingController' => $baseDir . '/../lib/Controller/LockingController.php',
+ 'OCA\\Testing\\Controller\\RateLimitTestController' => $baseDir . '/../lib/Controller/RateLimitTestController.php',
+ 'OCA\\Testing\\Locking\\FakeDBLockingProvider' => $baseDir . '/../lib/Locking/FakeDBLockingProvider.php',
+);
diff --git a/apps/testing/composer/composer/autoload_namespaces.php b/apps/testing/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/testing/composer/composer/autoload_psr4.php b/apps/testing/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..4ac8da6cc69
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\Testing\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/testing/composer/composer/autoload_real.php b/apps/testing/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..71369dc8a05
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitTesting
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitTesting', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitTesting', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitTesting::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/testing/composer/composer/autoload_static.php b/apps/testing/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..0a6c8665f4e
--- /dev/null
+++ b/apps/testing/composer/composer/autoload_static.php
@@ -0,0 +1,41 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitTesting
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\Testing\\' => 12,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\Testing\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\Testing\\AlternativeHomeUserBackend' => __DIR__ . '/..' . '/../lib/AlternativeHomeUserBackend.php',
+ 'OCA\\Testing\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\Testing\\Controller\\ConfigController' => __DIR__ . '/..' . '/../lib/Controller/ConfigController.php',
+ 'OCA\\Testing\\Controller\\LockingController' => __DIR__ . '/..' . '/../lib/Controller/LockingController.php',
+ 'OCA\\Testing\\Controller\\RateLimitTestController' => __DIR__ . '/..' . '/../lib/Controller/RateLimitTestController.php',
+ 'OCA\\Testing\\Locking\\FakeDBLockingProvider' => __DIR__ . '/..' . '/../lib/Locking/FakeDBLockingProvider.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitTesting::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitTesting::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitTesting::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/theming/l10n/en_GB.js b/apps/theming/l10n/en_GB.js
index 8d18b1ff95c..768cf51aba5 100644
--- a/apps/theming/l10n/en_GB.js
+++ b/apps/theming/l10n/en_GB.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "The given web address is too long",
"The given slogan is too long" : "The given slogan is too long",
"The given color is invalid" : "The given colour is invalid",
+ "There is no error, the file uploaded with success" : "There is no error, the file uploaded with success",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+ "The uploaded file was only partially uploaded" : "The uploaded file was only partially uploaded",
+ "No file was uploaded" : "No file was uploaded",
+ "Missing a temporary folder" : "Missing a temporary folder",
+ "Failed to write file to disk." : "Failed to write file to disk.",
+ "A PHP extension stopped the file upload." : "A PHP extension stopped the file upload.",
"No file uploaded" : "No file uploaded",
"Unsupported image type" : "Unsupported image type",
"You are already using a custom theme" : "You are already using a custom theme",
diff --git a/apps/theming/l10n/en_GB.json b/apps/theming/l10n/en_GB.json
index ace85849a36..cd6f2d72ab0 100644
--- a/apps/theming/l10n/en_GB.json
+++ b/apps/theming/l10n/en_GB.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "The given web address is too long",
"The given slogan is too long" : "The given slogan is too long",
"The given color is invalid" : "The given colour is invalid",
+ "There is no error, the file uploaded with success" : "There is no error, the file uploaded with success",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+ "The uploaded file was only partially uploaded" : "The uploaded file was only partially uploaded",
+ "No file was uploaded" : "No file was uploaded",
+ "Missing a temporary folder" : "Missing a temporary folder",
+ "Failed to write file to disk." : "Failed to write file to disk.",
+ "A PHP extension stopped the file upload." : "A PHP extension stopped the file upload.",
"No file uploaded" : "No file uploaded",
"Unsupported image type" : "Unsupported image type",
"You are already using a custom theme" : "You are already using a custom theme",
diff --git a/apps/theming/l10n/es.js b/apps/theming/l10n/es.js
index dbcaed2cfe4..e9a7e3efb37 100644
--- a/apps/theming/l10n/es.js
+++ b/apps/theming/l10n/es.js
@@ -9,6 +9,14 @@ OC.L10N.register(
"The given web address is too long" : "La dirección provista es muy larga",
"The given slogan is too long" : "El eslogan provisto es muy largo",
"The given color is invalid" : "El color provisto es inválido",
+ "There is no error, the file uploaded with success" : "No ha habido errores, el archivo ha subido satisfactoriamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo para subir excede la directiva upload_max_filesize en php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo para subir excede la directiva MAX_FILE_SIZE que se especifió en el formulario HTML",
+ "The uploaded file was only partially uploaded" : "El archivo para subir ha sido solo parcialmente subido",
+ "No file was uploaded" : "No se ha subido ningún archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Fallo al escribir el archivo al disco.",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP ha detenido la subida del archivo.",
"No file uploaded" : "No se ha subido archivo",
"Unsupported image type" : "Tipo de imagen no soportado",
"You are already using a custom theme" : "Usted ya usa un tema personalizado",
diff --git a/apps/theming/l10n/es.json b/apps/theming/l10n/es.json
index 0c183dc78e5..32a2cfca9cb 100644
--- a/apps/theming/l10n/es.json
+++ b/apps/theming/l10n/es.json
@@ -7,6 +7,14 @@
"The given web address is too long" : "La dirección provista es muy larga",
"The given slogan is too long" : "El eslogan provisto es muy largo",
"The given color is invalid" : "El color provisto es inválido",
+ "There is no error, the file uploaded with success" : "No ha habido errores, el archivo ha subido satisfactoriamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo para subir excede la directiva upload_max_filesize en php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo para subir excede la directiva MAX_FILE_SIZE que se especifió en el formulario HTML",
+ "The uploaded file was only partially uploaded" : "El archivo para subir ha sido solo parcialmente subido",
+ "No file was uploaded" : "No se ha subido ningún archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Fallo al escribir el archivo al disco.",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP ha detenido la subida del archivo.",
"No file uploaded" : "No se ha subido archivo",
"Unsupported image type" : "Tipo de imagen no soportado",
"You are already using a custom theme" : "Usted ya usa un tema personalizado",
diff --git a/apps/theming/l10n/es_CO.js b/apps/theming/l10n/es_CO.js
index 594e5b9beed..4f98160b142 100644
--- a/apps/theming/l10n/es_CO.js
+++ b/apps/theming/l10n/es_CO.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
"No file was uploaded" : "No se cargó el archivo",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
diff --git a/apps/theming/l10n/es_CO.json b/apps/theming/l10n/es_CO.json
index d6db2de8184..866eb07f7fa 100644
--- a/apps/theming/l10n/es_CO.json
+++ b/apps/theming/l10n/es_CO.json
@@ -10,6 +10,7 @@
"There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
"No file was uploaded" : "No se cargó el archivo",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
diff --git a/apps/theming/l10n/es_CR.js b/apps/theming/l10n/es_CR.js
new file mode 100644
index 00000000000..4f98160b142
--- /dev/null
+++ b/apps/theming/l10n/es_CR.js
@@ -0,0 +1,39 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Loading preview…" : "Cargando vista previa...",
+ "Saved" : "Guardado",
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
+ "No file was uploaded" : "No se cargó el archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP detuvo la carga del archivo. ",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Ya estás usando un tema personalizado",
+ "Theming" : "Tematizar",
+ "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
+ "Name" : "Nombre",
+ "Reset to default" : "Restablecer al predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Remove background image" : "Eliminar imagen de fondo",
+ "reset to default" : "restaurar a predeterminado",
+ "Log in image" : "Imagen de inicio de sesión"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/es_CR.json b/apps/theming/l10n/es_CR.json
new file mode 100644
index 00000000000..866eb07f7fa
--- /dev/null
+++ b/apps/theming/l10n/es_CR.json
@@ -0,0 +1,37 @@
+{ "translations": {
+ "Loading preview…" : "Cargando vista previa...",
+ "Saved" : "Guardado",
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
+ "No file was uploaded" : "No se cargó el archivo",
+ "Missing a temporary folder" : "Falta una carpeta temporal",
+ "Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
+ "A PHP extension stopped the file upload." : "Una extensión de PHP detuvo la carga del archivo. ",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Ya estás usando un tema personalizado",
+ "Theming" : "Tematizar",
+ "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "El tematizar hace posible personalizar facilmente la manera en que se ve tu instancia y clientes soportados. Esto será visible para todos los usuarios. ",
+ "Name" : "Nombre",
+ "Reset to default" : "Restablecer al predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Remove background image" : "Eliminar imagen de fondo",
+ "reset to default" : "restaurar a predeterminado",
+ "Log in image" : "Imagen de inicio de sesión"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/theming/l10n/es_MX.js b/apps/theming/l10n/es_MX.js
index 594e5b9beed..4f98160b142 100644
--- a/apps/theming/l10n/es_MX.js
+++ b/apps/theming/l10n/es_MX.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
"No file was uploaded" : "No se cargó el archivo",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
diff --git a/apps/theming/l10n/es_MX.json b/apps/theming/l10n/es_MX.json
index d6db2de8184..866eb07f7fa 100644
--- a/apps/theming/l10n/es_MX.json
+++ b/apps/theming/l10n/es_MX.json
@@ -10,6 +10,7 @@
"There is no error, the file uploaded with success" : "No hay errores, el archivo se cargó exitosamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML",
+ "The uploaded file was only partially uploaded" : "La carga del archivo solo se realizó parcialmente",
"No file was uploaded" : "No se cargó el archivo",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Failed to write file to disk." : "Se presentó una falla al escribir el archivo en el disco. ",
diff --git a/apps/twofactor_backupcodes/composer/autoload.php b/apps/twofactor_backupcodes/composer/autoload.php
new file mode 100644
index 00000000000..03a8800c318
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitTwoFactorBackupCodes::getLoader();
diff --git a/apps/twofactor_backupcodes/composer/composer.json b/apps/twofactor_backupcodes/composer/composer.json
new file mode 100644
index 00000000000..ef521965208
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "TwoFactorBackupCodes"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\TwoFactorBackupCodes\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/twofactor_backupcodes/composer/composer/ClassLoader.php b/apps/twofactor_backupcodes/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/twofactor_backupcodes/composer/composer/LICENSE b/apps/twofactor_backupcodes/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_classmap.php b/apps/twofactor_backupcodes/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..a9d9d3b5d4e
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_classmap.php
@@ -0,0 +1,21 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\TwoFactorBackupCodes\\Activity\\Provider' => $baseDir . '/../lib/Activity/Provider.php',
+ 'OCA\\TwoFactorBackupCodes\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\TwoFactorBackupCodes\\Controller\\SettingsController' => $baseDir . '/../lib/Controller/SettingsController.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCode' => $baseDir . '/../lib/Db/BackupCode.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCodeMapper' => $baseDir . '/../lib/Db/BackupCodeMapper.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607104347' => $baseDir . '/../lib/Migration/Version1002Date20170607104347.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607113030' => $baseDir . '/../lib/Migration/Version1002Date20170607113030.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170919123342' => $baseDir . '/../lib/Migration/Version1002Date20170919123342.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170926101419' => $baseDir . '/../lib/Migration/Version1002Date20170926101419.php',
+ 'OCA\\TwoFactorBackupCodes\\Provider\\BackupCodesProvider' => $baseDir . '/../lib/Provider/BackupCodesProvider.php',
+ 'OCA\\TwoFactorBackupCodes\\Service\\BackupCodeStorage' => $baseDir . '/../lib/Service/BackupCodeStorage.php',
+ 'OCA\\TwoFactorBackupCodes\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+);
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php b/apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_psr4.php b/apps/twofactor_backupcodes/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..c54d4c9819c
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\TwoFactorBackupCodes\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_real.php b/apps/twofactor_backupcodes/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..435d883ffa0
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitTwoFactorBackupCodes
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitTwoFactorBackupCodes', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitTwoFactorBackupCodes', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitTwoFactorBackupCodes::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/twofactor_backupcodes/composer/composer/autoload_static.php b/apps/twofactor_backupcodes/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..abde37697ee
--- /dev/null
+++ b/apps/twofactor_backupcodes/composer/composer/autoload_static.php
@@ -0,0 +1,47 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitTwoFactorBackupCodes
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\TwoFactorBackupCodes\\' => 25,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\TwoFactorBackupCodes\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\TwoFactorBackupCodes\\Activity\\Provider' => __DIR__ . '/..' . '/../lib/Activity/Provider.php',
+ 'OCA\\TwoFactorBackupCodes\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\TwoFactorBackupCodes\\Controller\\SettingsController' => __DIR__ . '/..' . '/../lib/Controller/SettingsController.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCode' => __DIR__ . '/..' . '/../lib/Db/BackupCode.php',
+ 'OCA\\TwoFactorBackupCodes\\Db\\BackupCodeMapper' => __DIR__ . '/..' . '/../lib/Db/BackupCodeMapper.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607104347' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170607104347.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170607113030' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170607113030.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170919123342' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170919123342.php',
+ 'OCA\\TwoFactorBackupCodes\\Migration\\Version1002Date20170926101419' => __DIR__ . '/..' . '/../lib/Migration/Version1002Date20170926101419.php',
+ 'OCA\\TwoFactorBackupCodes\\Provider\\BackupCodesProvider' => __DIR__ . '/..' . '/../lib/Provider/BackupCodesProvider.php',
+ 'OCA\\TwoFactorBackupCodes\\Service\\BackupCodeStorage' => __DIR__ . '/..' . '/../lib/Service/BackupCodeStorage.php',
+ 'OCA\\TwoFactorBackupCodes\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitTwoFactorBackupCodes::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitTwoFactorBackupCodes::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitTwoFactorBackupCodes::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/twofactor_backupcodes/l10n/es_CR.js b/apps/twofactor_backupcodes/l10n/es_CR.js
new file mode 100644
index 00000000000..925894cb77d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_CR.js
@@ -0,0 +1,18 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Generar los códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. Se han usado {{used}} de {{total}} códigos.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son tus códigos de respaldo. Por favor resguárdalos y/o imprímelos ya que no podrás leerlos otra vez después.",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "You created two-factor backup codes for your account" : "Creaste códigos de respaldo de dos factores para tu cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usa el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/es_CR.json b/apps/twofactor_backupcodes/l10n/es_CR.json
new file mode 100644
index 00000000000..3cfd05bcd37
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_CR.json
@@ -0,0 +1,16 @@
+{ "translations": {
+ "Generate backup codes" : "Generar los códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. Se han usado {{used}} de {{total}} códigos.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son tus códigos de respaldo. Por favor resguárdalos y/o imprímelos ya que no podrás leerlos otra vez después.",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "You created two-factor backup codes for your account" : "Creaste códigos de respaldo de dos factores para tu cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usa el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/composer/autoload.php b/apps/updatenotification/composer/autoload.php
new file mode 100644
index 00000000000..47cc4d587a5
--- /dev/null
+++ b/apps/updatenotification/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitUpdateNotification::getLoader();
diff --git a/apps/updatenotification/composer/composer.json b/apps/updatenotification/composer/composer.json
new file mode 100644
index 00000000000..3e14337eb69
--- /dev/null
+++ b/apps/updatenotification/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "UpdateNotification"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\UpdateNotification\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/updatenotification/composer/composer/ClassLoader.php b/apps/updatenotification/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/updatenotification/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/updatenotification/composer/composer/LICENSE b/apps/updatenotification/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/updatenotification/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/updatenotification/composer/composer/autoload_classmap.php b/apps/updatenotification/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..e1833548bcf
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_classmap.php
@@ -0,0 +1,15 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\UpdateNotification\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\UpdateNotification\\Controller\\AdminController' => $baseDir . '/../lib/Controller/AdminController.php',
+ 'OCA\\UpdateNotification\\Notification\\BackgroundJob' => $baseDir . '/../lib/Notification/BackgroundJob.php',
+ 'OCA\\UpdateNotification\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+ 'OCA\\UpdateNotification\\ResetTokenBackgroundJob' => $baseDir . '/../lib/ResetTokenBackgroundJob.php',
+ 'OCA\\UpdateNotification\\UpdateChecker' => $baseDir . '/../lib/UpdateChecker.php',
+);
diff --git a/apps/updatenotification/composer/composer/autoload_namespaces.php b/apps/updatenotification/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/updatenotification/composer/composer/autoload_psr4.php b/apps/updatenotification/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..361c205335a
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\UpdateNotification\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/updatenotification/composer/composer/autoload_real.php b/apps/updatenotification/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..41580edbf38
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitUpdateNotification
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitUpdateNotification', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitUpdateNotification', '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';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitUpdateNotification::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/updatenotification/composer/composer/autoload_static.php b/apps/updatenotification/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..1c63a2d234b
--- /dev/null
+++ b/apps/updatenotification/composer/composer/autoload_static.php
@@ -0,0 +1,41 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitUpdateNotification
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\UpdateNotification\\' => 23,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\UpdateNotification\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\UpdateNotification\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\UpdateNotification\\Controller\\AdminController' => __DIR__ . '/..' . '/../lib/Controller/AdminController.php',
+ 'OCA\\UpdateNotification\\Notification\\BackgroundJob' => __DIR__ . '/..' . '/../lib/Notification/BackgroundJob.php',
+ 'OCA\\UpdateNotification\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ 'OCA\\UpdateNotification\\ResetTokenBackgroundJob' => __DIR__ . '/..' . '/../lib/ResetTokenBackgroundJob.php',
+ 'OCA\\UpdateNotification\\UpdateChecker' => __DIR__ . '/..' . '/../lib/UpdateChecker.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitUpdateNotification::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitUpdateNotification::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitUpdateNotification::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/updatenotification/l10n/es_CR.js b/apps/updatenotification/l10n/es_CR.js
new file mode 100644
index 00000000000..7753f5b5a04
--- /dev/null
+++ b/apps/updatenotification/l10n/es_CR.js
@@ -0,0 +1,28 @@
+OC.L10N.register(
+ "updatenotification",
+ {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, por favor intenta la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} está disponible. Obten más información de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the Nextcloud and server log files for errors." : "Por favor verifica los archivos de bitacoras de Nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "The update check is not yet finished. Please refresh the page." : "La verificación de actualización aún no termina. Por favor actualiza la página.",
+ "Your version is up to date." : "Tu verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "A non-default update server is in use to be checked for updates:" : "Un servidor de actualizaciones no-predeterminado está en uso para ser verficiado por actualizaciones:",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puedes actualizar a una versión más reciente / canal experimental. Sin embargo nunca podrás desactualizar la versión a un canal más estable. ",
+ "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 que después una nueva publicación puede tomar algo de tiempo antes de que se muestre aquí. Distribuimos nuevas versiones para que sean distribuidas a través del tiempo para nuestros usuarios y algunas veces nos saltamos una versión cuando encontramos detalles.",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/es_CR.json b/apps/updatenotification/l10n/es_CR.json
new file mode 100644
index 00000000000..5dea8ca3eec
--- /dev/null
+++ b/apps/updatenotification/l10n/es_CR.json
@@ -0,0 +1,26 @@
+{ "translations": {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, por favor intenta la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} está disponible. Obten más información de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the Nextcloud and server log files for errors." : "Por favor verifica los archivos de bitacoras de Nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "The update check is not yet finished. Please refresh the page." : "La verificación de actualización aún no termina. Por favor actualiza la página.",
+ "Your version is up to date." : "Tu verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "A non-default update server is in use to be checked for updates:" : "Un servidor de actualizaciones no-predeterminado está en uso para ser verficiado por actualizaciones:",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puedes actualizar a una versión más reciente / canal experimental. Sin embargo nunca podrás desactualizar la versión a un canal más estable. ",
+ "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 que después una nueva publicación puede tomar algo de tiempo antes de que se muestre aquí. Distribuimos nuevas versiones para que sean distribuidas a través del tiempo para nuestros usuarios y algunas veces nos saltamos una versión cuando encontramos detalles.",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_ldap/composer/autoload.php b/apps/user_ldap/composer/autoload.php
new file mode 100644
index 00000000000..24824c188e5
--- /dev/null
+++ b/apps/user_ldap/composer/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitUser_LDAP::getLoader();
diff --git a/apps/user_ldap/composer/composer.json b/apps/user_ldap/composer/composer.json
new file mode 100644
index 00000000000..0af0b6bea39
--- /dev/null
+++ b/apps/user_ldap/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "authorative-autoloader": true,
+ "autoloader-suffix": "User_LDAP"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\User_LDAP\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/user_ldap/composer/composer/ClassLoader.php b/apps/user_ldap/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..2c72175e772
--- /dev/null
+++ b/apps/user_ldap/composer/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @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/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ $length = $this->prefixLengthsPsr4[$first][$search];
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/apps/user_ldap/composer/composer/LICENSE b/apps/user_ldap/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/user_ldap/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/user_ldap/composer/composer/autoload_classmap.php b/apps/user_ldap/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..6558af00212
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_classmap.php
@@ -0,0 +1,59 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\User_LDAP\\Access' => $baseDir . '/../lib/Access.php',
+ 'OCA\\User_LDAP\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\User_LDAP\\BackendUtility' => $baseDir . '/../lib/BackendUtility.php',
+ 'OCA\\User_LDAP\\Command\\CheckUser' => $baseDir . '/../lib/Command/CheckUser.php',
+ 'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => $baseDir . '/../lib/Command/CreateEmptyConfig.php',
+ 'OCA\\User_LDAP\\Command\\DeleteConfig' => $baseDir . '/../lib/Command/DeleteConfig.php',
+ 'OCA\\User_LDAP\\Command\\Search' => $baseDir . '/../lib/Command/Search.php',
+ 'OCA\\User_LDAP\\Command\\SetConfig' => $baseDir . '/../lib/Command/SetConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowConfig' => $baseDir . '/../lib/Command/ShowConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowRemnants' => $baseDir . '/../lib/Command/ShowRemnants.php',
+ 'OCA\\User_LDAP\\Command\\TestConfig' => $baseDir . '/../lib/Command/TestConfig.php',
+ 'OCA\\User_LDAP\\Configuration' => $baseDir . '/../lib/Configuration.php',
+ 'OCA\\User_LDAP\\Connection' => $baseDir . '/../lib/Connection.php',
+ 'OCA\\User_LDAP\\Controller\\ConfigAPIController' => $baseDir . '/../lib/Controller/ConfigAPIController.php',
+ 'OCA\\User_LDAP\\Controller\\RenewPasswordController' => $baseDir . '/../lib/Controller/RenewPasswordController.php',
+ 'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => $baseDir . '/../lib/Exceptions/ConstraintViolationException.php',
+ 'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => $baseDir . '/../lib/Exceptions/NotOnLDAP.php',
+ 'OCA\\User_LDAP\\FilesystemHelper' => $baseDir . '/../lib/FilesystemHelper.php',
+ 'OCA\\User_LDAP\\Group_LDAP' => $baseDir . '/../lib/Group_LDAP.php',
+ 'OCA\\User_LDAP\\Group_Proxy' => $baseDir . '/../lib/Group_Proxy.php',
+ 'OCA\\User_LDAP\\Helper' => $baseDir . '/../lib/Helper.php',
+ 'OCA\\User_LDAP\\ILDAPWrapper' => $baseDir . '/../lib/ILDAPWrapper.php',
+ 'OCA\\User_LDAP\\IUserLDAP' => $baseDir . '/../lib/IUserLDAP.php',
+ 'OCA\\User_LDAP\\Jobs\\CleanUp' => $baseDir . '/../lib/Jobs/CleanUp.php',
+ 'OCA\\User_LDAP\\Jobs\\UpdateGroups' => $baseDir . '/../lib/Jobs/UpdateGroups.php',
+ 'OCA\\User_LDAP\\LDAP' => $baseDir . '/../lib/LDAP.php',
+ 'OCA\\User_LDAP\\LDAPProvider' => $baseDir . '/../lib/LDAPProvider.php',
+ 'OCA\\User_LDAP\\LDAPProviderFactory' => $baseDir . '/../lib/LDAPProviderFactory.php',
+ 'OCA\\User_LDAP\\LDAPUtility' => $baseDir . '/../lib/LDAPUtility.php',
+ 'OCA\\User_LDAP\\LogWrapper' => $baseDir . '/../lib/LogWrapper.php',
+ 'OCA\\User_LDAP\\Mapping\\AbstractMapping' => $baseDir . '/../lib/Mapping/AbstractMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\GroupMapping' => $baseDir . '/../lib/Mapping/GroupMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\UserMapping' => $baseDir . '/../lib/Mapping/UserMapping.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFix' => $baseDir . '/../lib/Migration/UUIDFix.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => $baseDir . '/../lib/Migration/UUIDFixGroup.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => $baseDir . '/../lib/Migration/UUIDFixInsert.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixUser' => $baseDir . '/../lib/Migration/UUIDFixUser.php',
+ 'OCA\\User_LDAP\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+ 'OCA\\User_LDAP\\Proxy' => $baseDir . '/../lib/Proxy.php',
+ 'OCA\\User_LDAP\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\User_LDAP\\Settings\\Section' => $baseDir . '/../lib/Settings/Section.php',
+ 'OCA\\User_LDAP\\User\\DeletedUsersIndex' => $baseDir . '/../lib/User/DeletedUsersIndex.php',
+ 'OCA\\User_LDAP\\User\\IUserTools' => $baseDir . '/../lib/User/IUserTools.php',
+ 'OCA\\User_LDAP\\User\\Manager' => $baseDir . '/../lib/User/Manager.php',
+ 'OCA\\User_LDAP\\User\\OfflineUser' => $baseDir . '/../lib/User/OfflineUser.php',
+ 'OCA\\User_LDAP\\User\\User' => $baseDir . '/../lib/User/User.php',
+ 'OCA\\User_LDAP\\User_LDAP' => $baseDir . '/../lib/User_LDAP.php',
+ 'OCA\\User_LDAP\\User_Proxy' => $baseDir . '/../lib/User_Proxy.php',
+ 'OCA\\User_LDAP\\Wizard' => $baseDir . '/../lib/Wizard.php',
+ 'OCA\\User_LDAP\\WizardResult' => $baseDir . '/../lib/WizardResult.php',
+);
diff --git a/apps/user_ldap/composer/composer/autoload_namespaces.php b/apps/user_ldap/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..71c9e91858d
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/user_ldap/composer/composer/autoload_psr4.php b/apps/user_ldap/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..5251e2c1f81
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\User_LDAP\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/user_ldap/composer/composer/autoload_real.php b/apps/user_ldap/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..ab7adf2412f
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_real.php
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitUser_LDAP
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInitUser_LDAP', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitUser_LDAP::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/user_ldap/composer/composer/autoload_static.php b/apps/user_ldap/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..f80900f7904
--- /dev/null
+++ b/apps/user_ldap/composer/composer/autoload_static.php
@@ -0,0 +1,85 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitUser_LDAP
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\User_LDAP\\' => 14,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\User_LDAP\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'OCA\\User_LDAP\\Access' => __DIR__ . '/..' . '/../lib/Access.php',
+ 'OCA\\User_LDAP\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\User_LDAP\\BackendUtility' => __DIR__ . '/..' . '/../lib/BackendUtility.php',
+ 'OCA\\User_LDAP\\Command\\CheckUser' => __DIR__ . '/..' . '/../lib/Command/CheckUser.php',
+ 'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => __DIR__ . '/..' . '/../lib/Command/CreateEmptyConfig.php',
+ 'OCA\\User_LDAP\\Command\\DeleteConfig' => __DIR__ . '/..' . '/../lib/Command/DeleteConfig.php',
+ 'OCA\\User_LDAP\\Command\\Search' => __DIR__ . '/..' . '/../lib/Command/Search.php',
+ 'OCA\\User_LDAP\\Command\\SetConfig' => __DIR__ . '/..' . '/../lib/Command/SetConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowConfig' => __DIR__ . '/..' . '/../lib/Command/ShowConfig.php',
+ 'OCA\\User_LDAP\\Command\\ShowRemnants' => __DIR__ . '/..' . '/../lib/Command/ShowRemnants.php',
+ 'OCA\\User_LDAP\\Command\\TestConfig' => __DIR__ . '/..' . '/../lib/Command/TestConfig.php',
+ 'OCA\\User_LDAP\\Configuration' => __DIR__ . '/..' . '/../lib/Configuration.php',
+ 'OCA\\User_LDAP\\Connection' => __DIR__ . '/..' . '/../lib/Connection.php',
+ 'OCA\\User_LDAP\\Controller\\ConfigAPIController' => __DIR__ . '/..' . '/../lib/Controller/ConfigAPIController.php',
+ 'OCA\\User_LDAP\\Controller\\RenewPasswordController' => __DIR__ . '/..' . '/../lib/Controller/RenewPasswordController.php',
+ 'OCA\\User_LDAP\\Exceptions\\ConstraintViolationException' => __DIR__ . '/..' . '/../lib/Exceptions/ConstraintViolationException.php',
+ 'OCA\\User_LDAP\\Exceptions\\NotOnLDAP' => __DIR__ . '/..' . '/../lib/Exceptions/NotOnLDAP.php',
+ 'OCA\\User_LDAP\\FilesystemHelper' => __DIR__ . '/..' . '/../lib/FilesystemHelper.php',
+ 'OCA\\User_LDAP\\Group_LDAP' => __DIR__ . '/..' . '/../lib/Group_LDAP.php',
+ 'OCA\\User_LDAP\\Group_Proxy' => __DIR__ . '/..' . '/../lib/Group_Proxy.php',
+ 'OCA\\User_LDAP\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
+ 'OCA\\User_LDAP\\ILDAPWrapper' => __DIR__ . '/..' . '/../lib/ILDAPWrapper.php',
+ 'OCA\\User_LDAP\\IUserLDAP' => __DIR__ . '/..' . '/../lib/IUserLDAP.php',
+ 'OCA\\User_LDAP\\Jobs\\CleanUp' => __DIR__ . '/..' . '/../lib/Jobs/CleanUp.php',
+ 'OCA\\User_LDAP\\Jobs\\UpdateGroups' => __DIR__ . '/..' . '/../lib/Jobs/UpdateGroups.php',
+ 'OCA\\User_LDAP\\LDAP' => __DIR__ . '/..' . '/../lib/LDAP.php',
+ 'OCA\\User_LDAP\\LDAPProvider' => __DIR__ . '/..' . '/../lib/LDAPProvider.php',
+ 'OCA\\User_LDAP\\LDAPProviderFactory' => __DIR__ . '/..' . '/../lib/LDAPProviderFactory.php',
+ 'OCA\\User_LDAP\\LDAPUtility' => __DIR__ . '/..' . '/../lib/LDAPUtility.php',
+ 'OCA\\User_LDAP\\LogWrapper' => __DIR__ . '/..' . '/../lib/LogWrapper.php',
+ 'OCA\\User_LDAP\\Mapping\\AbstractMapping' => __DIR__ . '/..' . '/../lib/Mapping/AbstractMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\GroupMapping' => __DIR__ . '/..' . '/../lib/Mapping/GroupMapping.php',
+ 'OCA\\User_LDAP\\Mapping\\UserMapping' => __DIR__ . '/..' . '/../lib/Mapping/UserMapping.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFix' => __DIR__ . '/..' . '/../lib/Migration/UUIDFix.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixGroup' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixGroup.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixInsert' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixInsert.php',
+ 'OCA\\User_LDAP\\Migration\\UUIDFixUser' => __DIR__ . '/..' . '/../lib/Migration/UUIDFixUser.php',
+ 'OCA\\User_LDAP\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ 'OCA\\User_LDAP\\Proxy' => __DIR__ . '/..' . '/../lib/Proxy.php',
+ 'OCA\\User_LDAP\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\User_LDAP\\Settings\\Section' => __DIR__ . '/..' . '/../lib/Settings/Section.php',
+ 'OCA\\User_LDAP\\User\\DeletedUsersIndex' => __DIR__ . '/..' . '/../lib/User/DeletedUsersIndex.php',
+ 'OCA\\User_LDAP\\User\\IUserTools' => __DIR__ . '/..' . '/../lib/User/IUserTools.php',
+ 'OCA\\User_LDAP\\User\\Manager' => __DIR__ . '/..' . '/../lib/User/Manager.php',
+ 'OCA\\User_LDAP\\User\\OfflineUser' => __DIR__ . '/..' . '/../lib/User/OfflineUser.php',
+ 'OCA\\User_LDAP\\User\\User' => __DIR__ . '/..' . '/../lib/User/User.php',
+ 'OCA\\User_LDAP\\User_LDAP' => __DIR__ . '/..' . '/../lib/User_LDAP.php',
+ 'OCA\\User_LDAP\\User_Proxy' => __DIR__ . '/..' . '/../lib/User_Proxy.php',
+ 'OCA\\User_LDAP\\Wizard' => __DIR__ . '/..' . '/../lib/Wizard.php',
+ 'OCA\\User_LDAP\\WizardResult' => __DIR__ . '/..' . '/../lib/WizardResult.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitUser_LDAP::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitUser_LDAP::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitUser_LDAP::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/user_ldap/l10n/es_CR.js b/apps/user_ldap/l10n/es_CR.js
new file mode 100644
index 00000000000..63d3d71e0a9
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CR.js
@@ -0,0 +1,197 @@
+OC.L10N.register(
+ "user_ldap",
+ {
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ",
+ "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado alguna acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "LDAP user and group backend" : "Backend de LDAP para usuario y grupo",
+ "Renewing …" : "Renovando ...",
+ "Very weak password" : "Contraseña muy debil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuración... ",
+ "Configuration incorrect" : "Configuración Incorrecta",
+ "Configuration incomplete" : "Configuración incompleta",
+ "Configuration OK" : "Configuración correcta",
+ "Select groups" : "Seleccionar grupos",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Por favor verifica tus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, por favor especifícalo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN Base, por favor verifica las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, por favor ingreésalo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.",
+ "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al borrar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Por favor proporciona un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Por favor verifica que la base de datos esté operando. Vuelve a cargar antes de continuar. ",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
+ "Select attributes" : "Seleccionar atributos",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor verifica tus atributos de inicio de sesión y tu usuario. Filtro aplicado (para copiar-y-pegar para una validación de línea de comando): <br/>",
+ "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ",
+ "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña",
+ "Your password will expire tomorrow." : "Tu contraseña expirará mañana.",
+ "Your password will expire today." : "Tu contraseña expirará el día de hoy. ",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "],
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
+ "Help" : "Ayuda",
+ "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Usuario LDAP / AD:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ",
+ "Other Attributes:" : "Otros atributos:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar configuraciones ",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new configuration" : "Agregar una nueva configuración",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
+ "Host" : "Servidor",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Puedes omitir el protocolo, a menos que requiera SSL. Si es el caso, empieza con ldaps://",
+ "Port" : "Puerto",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del cliente del usuario con el que se vinculará, ejem. uid=agente,dc=ejemplo,dc=com. Para tener un acceso anónimo, deja el DN y la contraseña vacíos.",
+ "Password" : "Contraseña",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deja la contraseña y DN vacíos.",
+ "One Base DN per line" : "Un DN Base por línea",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Puedes especificar el DN Base para usuarios y grupos en la pestaña Avanzado",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar el DN Base",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no estás seguro de cuál clase de objeto selecciónar, por favor consulta tu directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar configuraciones y contar ususarios",
+ "Saving" : "Guardando",
+ "Back" : "Atrás",
+ "Continue" : "Continuar",
+ "Please renew your password." : "Por favor renueva tu contraseña.",
+ "An internal error occurred." : "Se presentó un error interno. ",
+ "Please try again or contact your administrator." : "Por favor inténtarlo de nuevo o contacta a tu administrador. ",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Renew password" : "Renovar contraseña",
+ "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña incorrecta. ",
+ "Cancel" : "Cancelar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atributos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
+ "Advanced" : "Avanzado",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el backend no funcionará. Por favor solicita su instalación a tu administrador del sistema.",
+ "Connection Settings" : "Configuraciones de la conexión",
+ "Configuration Active" : "Configuracion Activa",
+ "When unchecked, this configuration will be skipped." : "Cuando no esté seleccionada, esta configuración será omitida.",
+ "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Por favor proporciona un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
+ "Disable Main Server" : "Deshabilitar servidor principal",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
+ "Turn off SSL certificate validation." : "Deshabilitar la validación del certificado SSL.",
+ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "¡No se recomienda, úsalo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importa el certificado SSL del servidor LDAP a tu servidor %s.",
+ "Cache Time-To-Live" : "Tiempo de vida del caché",
+ "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
+ "Directory Settings" : "Configuraciones del directorio",
+ "User Display Name Field" : "Campo de Usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
+ "One User Base DN per line" : "Un Usuario Base de DN por línea",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
+ "Optional; one attribute per line" : "Opcional; un atributo por línea",
+ "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar",
+ "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.",
+ "Base Group Tree" : "Árbol base de grupo",
+ "One Group Base DN per line" : "Un DN Base de Grupo por línea",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
+ "Group-Member association" : "Asociación Grupo-Miembro",
+ "Dynamic Group Member URL" : "URL Dinámico de Miembro de Grupo ",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "El atributo de LDAP que, en objetos de grupo, contiene una URL de búsqueda LDAP que determina cuáles objetos pertenecen al grupo. (Un ajuste vacío deshabilita la funcionalidad de membrecía de grupo dinámica.)",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando está activado, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "El tamaño de chunk usado para las búsquedas con paginación de LDAP puede regresar resuldados volumniosos tales como enumeraciones de usuarios o grupos. (Establecerlo a 0 deshabilita las búsquedas con paginación en estos casos). ",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona cuando la configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Default password policy DN" : "DN de la política predeterminada de contraseñas",
+ "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Sólo funciona cuando está habilitado el cambio de contraseñas por el usuario y sólo está soportado para OpenLDAP. Déjalo en blanco para deshabilitar el manejo de expiración de contraseñas.",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, por favor especifica el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el usuario (predeterminado). En caso contrario, especifica un atributo LDAP/AD.",
+ "Internal Username" : "Usuario interno",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
+ "Override UUID detection" : "Anular la detección UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
+ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
+ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Usuario interno. Esto requiere un mapeo del Usuario al usuario-LDAP. El Usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Usuario interno se usa en todos lados. Limpiar los mapeos dejará rastros en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca borres las configuraciones en el ambiente de producción, sólo házlo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El id %u del marcador de posición falta. Será reemplazado con el usuario al consultar LDAP / AD.",
+ "Verify settings and count groups" : "Verificar configuraciones y contar grupos",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puedes omitir el protocolo, excepto si requieres SSL. En ese caso, empieza con ldaps://",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Puedes expermientar comportamientos inesperados. Por favor solicita a tu administrador del sistema deshabilitar alguno de ellos.",
+ "in bytes" : "en bytes"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/es_CR.json b/apps/user_ldap/l10n/es_CR.json
new file mode 100644
index 00000000000..eefeb9a037f
--- /dev/null
+++ b/apps/user_ldap/l10n/es_CR.json
@@ -0,0 +1,195 @@
+{ "translations": {
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "Invalid configuration: Anonymous binding is not allowed." : "Configuración inválida: La vinculación anónima no está permitida. ",
+ "Valid configuration, connection established!" : "¡Configuración válida, conexión establecida!",
+ "Valid configuration, but binding failed. Please check the server settings and credentials." : "Configuración válida, pero la vinculación falló. Por favor verifica la configuración del servidor y las credenciales.",
+ "Invalid configuration. Please have a look at the logs for further details." : "Configuración inválida. Por favor verifica las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado alguna acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "LDAP user and group backend" : "Backend de LDAP para usuario y grupo",
+ "Renewing …" : "Renovando ...",
+ "Very weak password" : "Contraseña muy debil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuración... ",
+ "Configuration incorrect" : "Configuración Incorrecta",
+ "Configuration incomplete" : "Configuración incompleta",
+ "Configuration OK" : "Configuración correcta",
+ "Select groups" : "Seleccionar grupos",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Por favor verifica tus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, por favor especifícalo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN Base, por favor verifica las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, por favor ingreésalo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Por favor verifica.",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Por favor verifica la DN Base, así como las configuraciones de la conexión y las credenciales.",
+ "Do you really want to delete the current Server Configuration?" : "¿Realmente deseas eliminar la configuración actual del servidor?",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al borrar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Por favor proporciona un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Por favor verifica que la base de datos esté operando. Vuelve a cargar antes de continuar. ",
+ "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
+ "Select attributes" : "Seleccionar atributos",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): <br/>" : "Usuario no encontrado. Por favor verifica tus atributos de inicio de sesión y tu usuario. Filtro aplicado (para copiar-y-pegar para una validación de línea de comando): <br/>",
+ "User found and settings verified." : "Usuario encontrado y configuraciones verificadas. ",
+ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Considera refinar la búsqueda, ya que abarca demasiados usuarios y solo el primero de ellos podrá iniciar sesión. ",
+ "An unspecified error occurred. Please check log and settings." : "Se presentó un error inesperado. Por fvor verifica la bitácora y las configuraciones.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Por favor verifícalo. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, por favor verifica el servidor, puerto y credenciales. ",
+ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Falta el \"%uid\" del marcador de posición. Será reemplazado con el nombre de usuario al consultar LDAP / AD.",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "Please login with the new password" : "Por favor inicia sesion con la nueva contraseña",
+ "Your password will expire tomorrow." : "Tu contraseña expirará mañana.",
+ "Your password will expire today." : "Tu contraseña expirará el día de hoy. ",
+ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "],
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "No fue posible detectar el atributo del nombre a desplegar del usuario. Por favor especifícalo tú mismo en las configuraciones avanzadas de LDAP. ",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
+ "Help" : "Ayuda",
+ "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen con los siguientes criterios están disponibles en %s:",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count the groups" : "Verificar las configuraciones y contar los grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Usuario LDAP / AD:",
+ "Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Permite iniciar sesión contra el usuario LDAP / AD que es ya sea \"uid\" o \"sAMAccountName\" y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Permite iniciar sesión contra el atributo de email. \"mail\" y \"mailPrimaryAddresw\" está permitido. ",
+ "Other Attributes:" : "Otros atributos:",
+ "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta iniciar sesión. \"%% uid\" remplaza el usuario en la acción de inicio de sesión. Ejemplo: \"uid=%% uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar configuraciones ",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new configuration" : "Agregar una nueva configuración",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
+ "Host" : "Servidor",
+ "You can omit the protocol, unless you require SSL. If so, start with ldaps://" : "Puedes omitir el protocolo, a menos que requiera SSL. Si es el caso, empieza con ldaps://",
+ "Port" : "Puerto",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del cliente del usuario con el que se vinculará, ejem. uid=agente,dc=ejemplo,dc=com. Para tener un acceso anónimo, deja el DN y la contraseña vacíos.",
+ "Password" : "Contraseña",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deja la contraseña y DN vacíos.",
+ "One Base DN per line" : "Un DN Base por línea",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Puedes especificar el DN Base para usuarios y grupos en la pestaña Avanzado",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar el DN Base",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no estás seguro de cuál clase de objeto selecciónar, por favor consulta tu directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar configuraciones y contar ususarios",
+ "Saving" : "Guardando",
+ "Back" : "Atrás",
+ "Continue" : "Continuar",
+ "Please renew your password." : "Por favor renueva tu contraseña.",
+ "An internal error occurred." : "Se presentó un error interno. ",
+ "Please try again or contact your administrator." : "Por favor inténtarlo de nuevo o contacta a tu administrador. ",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Renew password" : "Renovar contraseña",
+ "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña incorrecta. ",
+ "Cancel" : "Cancelar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atributos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
+ "Advanced" : "Avanzado",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el backend no funcionará. Por favor solicita su instalación a tu administrador del sistema.",
+ "Connection Settings" : "Configuraciones de la conexión",
+ "Configuration Active" : "Configuracion Activa",
+ "When unchecked, this configuration will be skipped." : "Cuando no esté seleccionada, esta configuración será omitida.",
+ "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Por favor proporciona un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
+ "Disable Main Server" : "Deshabilitar servidor principal",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
+ "Turn off SSL certificate validation." : "Deshabilitar la validación del certificado SSL.",
+ "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "¡No se recomienda, úsalo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importa el certificado SSL del servidor LDAP a tu servidor %s.",
+ "Cache Time-To-Live" : "Tiempo de vida del caché",
+ "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
+ "Directory Settings" : "Configuraciones del directorio",
+ "User Display Name Field" : "Campo de Usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
+ "One User Base DN per line" : "Un Usuario Base de DN por línea",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
+ "Optional; one attribute per line" : "Opcional; un atributo por línea",
+ "Group Display Name Field" : "Campo de Nombre de Grupo a Desplegar",
+ "The LDAP attribute to use to generate the groups's display name." : "El atributo LDAP a usar para generar el nombre para mostrar del grupo.",
+ "Base Group Tree" : "Árbol base de grupo",
+ "One Group Base DN per line" : "Un DN Base de Grupo por línea",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
+ "Group-Member association" : "Asociación Grupo-Miembro",
+ "Dynamic Group Member URL" : "URL Dinámico de Miembro de Grupo ",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "El atributo de LDAP que, en objetos de grupo, contiene una URL de búsqueda LDAP que determina cuáles objetos pertenecen al grupo. (Un ajuste vacío deshabilita la funcionalidad de membrecía de grupo dinámica.)",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando está activado, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "El tamaño de chunk usado para las búsquedas con paginación de LDAP puede regresar resuldados volumniosos tales como enumeraciones de usuarios o grupos. (Establecerlo a 0 deshabilita las búsquedas con paginación en estos casos). ",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona cuando la configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Default password policy DN" : "DN de la política predeterminada de contraseñas",
+ "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Sólo funciona cuando está habilitado el cambio de contraseñas por el usuario y sólo está soportado para OpenLDAP. Déjalo en blanco para deshabilitar el manejo de expiración de contraseñas.",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, por favor especifica el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Déjalo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el usuario (predeterminado). En caso contrario, especifica un atributo LDAP/AD.",
+ "Internal Username" : "Usuario interno",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Por defecto, el usuario interno se creará con base en el atributo UUID. Ésto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El usuario intenro tiene la restricción de que sólo permite los siguientes caracteres: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un número. El usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Déjalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
+ "Override UUID detection" : "Anular la detección UUID",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puedes anular la configuración y proporcionar el atributo que quieras. Debes asegurarte de que el atributo que quieres sea accesible por los usuarios y grupos y que sea único. Mantenlo vacío para tener el comportamiento predeterminado. Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
+ "UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
+ "Username-LDAP User Mapping" : "Mapeo del Usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Usuario interno. Esto requiere un mapeo del Usuario al usuario-LDAP. El Usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Usuario interno se usa en todos lados. Limpiar los mapeos dejará rastros en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca borres las configuraciones en el ambiente de producción, sólo házlo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Borrar el mapeo de los Usuarios a los Usuarios-LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Borrar el mapeo de los Nombres de grupo a los grupos-LDAP",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El id %u del marcador de posición falta. Será reemplazado con el usuario al consultar LDAP / AD.",
+ "Verify settings and count groups" : "Verificar configuraciones y contar grupos",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puedes omitir el protocolo, excepto si requieres SSL. En ese caso, empieza con ldaps://",
+ "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Puedes expermientar comportamientos inesperados. Por favor solicita a tu administrador del sistema deshabilitar alguno de ellos.",
+ "in bytes" : "en bytes"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index b6674cf0332..bbf07165090 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -1853,20 +1853,19 @@ class Access extends LDAPUtility implements IUserTools {
$cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
if(empty($cookie) && $cookie !== "0" && ($offset > 0)) {
- // no cookie known, although the offset is not 0. Maybe cache run out. We need
- // to start all over *sigh* (btw, Dear Reader, did you know LDAP paged
- // searching was designed by MSFT?)
- // Lukas: No, but thanks to reading that source I finally know!
- // '0' is valid, because 389ds
- $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit;
- //a bit recursive, $offset of 0 is the exit
- \OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO);
- $this->search($filter, array($base), $attr, $limit, $reOffset, true);
+ // no cookie known from a potential previous search. We need
+ // to start from 0 to come to the desired page. cookie value
+ // of '0' is valid, because 389ds
+ $reOffset = 0;
+ while($reOffset < $offset) {
+ $this->search($filter, array($base), $attr, $limit, $reOffset, true);
+ $reOffset += $limit;
+ }
$cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset);
//still no cookie? obviously, the server does not like us. Let's skip paging efforts.
+ // '0' is valid, because 389ds
//TODO: remember this, probably does not change in the next request...
if(empty($cookie) && $cookie !== '0') {
- // '0' is valid, because 389ds
$cookie = null;
}
}
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index 3350dd6a5cd..9e84cbde35b 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -122,7 +122,7 @@ class Connection extends LDAPUtility {
/**
* @param string $name
- * @return bool|mixed|void
+ * @return bool|mixed
*/
public function __get($name) {
if(!$this->configured) {
diff --git a/apps/workflowengine/l10n/es_CR.js b/apps/workflowengine/l10n/es_CR.js
new file mode 100644
index 00000000000..a67dbc8472f
--- /dev/null
+++ b/apps/workflowengine/l10n/es_CR.js
@@ -0,0 +1,73 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Saved" : "Guardado",
+ "Saving failed:" : "Falla al guardar:",
+ "File MIME type" : "Tipo MIME del archivo",
+ "is" : "es",
+ "is not" : "no es",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "Example: {placeholder}" : "Ejemplo: {placeholder}",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Start" : "Inicio",
+ "End" : "Fin",
+ "Select timezone…" : "Selecciona la zona horaria...",
+ "Request URL" : "Solicitar URL",
+ "Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Sync clients" : "Sincronizar clientes",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de",
+ "The given operator is invalid" : "El operador indicado es inválido",
+ "The given regular expression is invalid" : "La expresión regular indicada es inválida",
+ "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
+ "The given IP range is invalid" : "El rango de IP's es inválido",
+ "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
+ "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
+ "The given start time is invalid" : "El tiempo inicial dado no es válido",
+ "The given end time is invalid" : "El tiempo final dado no es válido",
+ "The given group does not exist" : "El grupo dado no existe",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Operation #%s does not exist" : "La operación #%s no existe",
+ "Operation %s does not exist" : "La operación %s no existe",
+ "Operation %s is invalid" : "La operación %s es inválida",
+ "Check %s does not exist" : "La validación %s no existe",
+ "Check %s is invalid" : "La validación %s no es inválida",
+ "Check #%s does not exist" : "La validación #%s no existe",
+ "Workflow" : "Flujo de trabajo",
+ "Open documentation" : "Abrir la documentación",
+ "Add rule group" : "Agregar regla de grupo",
+ "Short rule description" : "Descripción corta de la regla",
+ "Add rule" : "Agregar regla",
+ "Reset" : "Restablecer",
+ "Save" : "Guardar",
+ "Saving…" : "Guardando...",
+ "Loading…" : "Cargando...",
+ "Successfully saved" : "Guardado exitosamente",
+ "File mime type" : "Tipo mime del archivo"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_CR.json b/apps/workflowengine/l10n/es_CR.json
new file mode 100644
index 00000000000..1ae425f4e19
--- /dev/null
+++ b/apps/workflowengine/l10n/es_CR.json
@@ -0,0 +1,71 @@
+{ "translations": {
+ "Saved" : "Guardado",
+ "Saving failed:" : "Falla al guardar:",
+ "File MIME type" : "Tipo MIME del archivo",
+ "is" : "es",
+ "is not" : "no es",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "Example: {placeholder}" : "Ejemplo: {placeholder}",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Start" : "Inicio",
+ "End" : "Fin",
+ "Select timezone…" : "Selecciona la zona horaria...",
+ "Request URL" : "Solicitar URL",
+ "Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Sync clients" : "Sincronizar clientes",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de",
+ "The given operator is invalid" : "El operador indicado es inválido",
+ "The given regular expression is invalid" : "La expresión regular indicada es inválida",
+ "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
+ "The given IP range is invalid" : "El rango de IP's es inválido",
+ "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
+ "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
+ "The given start time is invalid" : "El tiempo inicial dado no es válido",
+ "The given end time is invalid" : "El tiempo final dado no es válido",
+ "The given group does not exist" : "El grupo dado no existe",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Operation #%s does not exist" : "La operación #%s no existe",
+ "Operation %s does not exist" : "La operación %s no existe",
+ "Operation %s is invalid" : "La operación %s es inválida",
+ "Check %s does not exist" : "La validación %s no existe",
+ "Check %s is invalid" : "La validación %s no es inválida",
+ "Check #%s does not exist" : "La validación #%s no existe",
+ "Workflow" : "Flujo de trabajo",
+ "Open documentation" : "Abrir la documentación",
+ "Add rule group" : "Agregar regla de grupo",
+ "Short rule description" : "Descripción corta de la regla",
+ "Add rule" : "Agregar regla",
+ "Reset" : "Restablecer",
+ "Save" : "Guardar",
+ "Saving…" : "Guardando...",
+ "Loading…" : "Cargando...",
+ "Successfully saved" : "Guardado exitosamente",
+ "File mime type" : "Tipo mime del archivo"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/id.js b/apps/workflowengine/l10n/id.js
index f1505694a22..2e22dd57a98 100644
--- a/apps/workflowengine/l10n/id.js
+++ b/apps/workflowengine/l10n/id.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"workflowengine",
{
- "Successfully saved" : "Berhasil disimpan",
+ "Saved" : "Disimpan",
"Saving failed:" : "Penyimpanan gagal:",
- "File mime type" : "Tipe MIME berkas",
+ "File MIME type" : "Berkas tipe MIME",
"is" : "adalah",
"is not" : "bukan",
"matches" : "cocok dengan",
@@ -50,6 +50,24 @@ OC.L10N.register(
"The given time span is invalid" : "Rentang waktu yang diberikan tidak sah",
"The given start time is invalid" : "Waktu mulai yang diberikan tidak sah",
"The given end time is invalid" : "Waktu selesai yang diberikan tidak sah",
- "The given group does not exist" : "Grup yang diberikan tidak ada"
+ "The given group does not exist" : "Grup yang diberikan tidak ada",
+ "Check %s is invalid or does not exist" : "Cek %s tidak valid atau tidak ada",
+ "Operation #%s does not exist" : "Operasi #%s tidak ada",
+ "Operation %s does not exist" : "Operasi %s tidak ada",
+ "Operation %s is invalid" : "Operasi %s tidak valid",
+ "Check %s does not exist" : "Cek %s tidak ada",
+ "Check %s is invalid" : "Cek %s tidak valid",
+ "Check #%s does not exist" : "Cek #%s tidak ada",
+ "Workflow" : "Alur kerja",
+ "Open documentation" : "Buka dokumentasi",
+ "Add rule group" : "Tambahkan aturan grup ",
+ "Short rule description" : "Deskripsi aturan singkat",
+ "Add rule" : "Tambahkan aturan",
+ "Reset" : "Setel ulang",
+ "Save" : "Simpan",
+ "Saving…" : "Menyimpan...",
+ "Loading…" : "Memuat...",
+ "Successfully saved" : "Berhasil disimpan",
+ "File mime type" : "Tipe MIME berkas"
},
"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/id.json b/apps/workflowengine/l10n/id.json
index 5091cd67bd3..319caa1ba6e 100644
--- a/apps/workflowengine/l10n/id.json
+++ b/apps/workflowengine/l10n/id.json
@@ -1,7 +1,7 @@
{ "translations": {
- "Successfully saved" : "Berhasil disimpan",
+ "Saved" : "Disimpan",
"Saving failed:" : "Penyimpanan gagal:",
- "File mime type" : "Tipe MIME berkas",
+ "File MIME type" : "Berkas tipe MIME",
"is" : "adalah",
"is not" : "bukan",
"matches" : "cocok dengan",
@@ -48,6 +48,24 @@
"The given time span is invalid" : "Rentang waktu yang diberikan tidak sah",
"The given start time is invalid" : "Waktu mulai yang diberikan tidak sah",
"The given end time is invalid" : "Waktu selesai yang diberikan tidak sah",
- "The given group does not exist" : "Grup yang diberikan tidak ada"
+ "The given group does not exist" : "Grup yang diberikan tidak ada",
+ "Check %s is invalid or does not exist" : "Cek %s tidak valid atau tidak ada",
+ "Operation #%s does not exist" : "Operasi #%s tidak ada",
+ "Operation %s does not exist" : "Operasi %s tidak ada",
+ "Operation %s is invalid" : "Operasi %s tidak valid",
+ "Check %s does not exist" : "Cek %s tidak ada",
+ "Check %s is invalid" : "Cek %s tidak valid",
+ "Check #%s does not exist" : "Cek #%s tidak ada",
+ "Workflow" : "Alur kerja",
+ "Open documentation" : "Buka dokumentasi",
+ "Add rule group" : "Tambahkan aturan grup ",
+ "Short rule description" : "Deskripsi aturan singkat",
+ "Add rule" : "Tambahkan aturan",
+ "Reset" : "Setel ulang",
+ "Save" : "Simpan",
+ "Saving…" : "Menyimpan...",
+ "Loading…" : "Memuat...",
+ "Successfully saved" : "Berhasil disimpan",
+ "File mime type" : "Tipe MIME berkas"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/build/.phan/config.php b/build/.phan/config.php
index cdf41630766..47bcb87acdd 100644
--- a/build/.phan/config.php
+++ b/build/.phan/config.php
@@ -43,29 +43,50 @@ return [
"exclude_analysis_directory_list" => [
'3rdparty',
'lib/composer',
+ 'apps/admin_audit/composer',
'apps/admin_audit/tests',
+ 'apps/comments/composer',
'apps/comments/tests',
+ 'apps/dav/composer',
'apps/dav/tests',
+ 'apps/encryption/composer',
'apps/encryption/tests',
+ 'apps/federatedfilesharing/composer',
'apps/federatedfilesharing/tests',
+ 'apps/federation/composer',
'apps/federation/tests',
+ 'apps/files/composer',
'apps/files/tests',
'apps/files_external/3rdparty',
+ 'apps/files_external/composer',
'apps/files_external/tests',
'apps/files_sharing/composer',
'apps/files_sharing/tests',
+ 'apps/files_trashbin/composer',
'apps/files_trashbin/tests',
+ 'apps/files_versions/composer',
'apps/files_versions/tests',
+ 'apps/lookup_server_connector/composer',
'apps/lookup_server_connector/tests',
+ 'apps/oauth2/composer',
'apps/oauth2/tests',
+ 'apps/provisioning_api/composer',
'apps/provisioning_api/tests',
+ 'apps/sharebymail/composer',
'apps/sharebymail/tests',
+ 'apps/systemtags/composer',
'apps/systemtags/tests',
+ 'apps/testing/composer',
'apps/testing/tests',
+ 'apps/theming/composer',
'apps/theming/tests',
+ 'apps/twofactor_backupcodes/composer',
'apps/twofactor_backupcodes/tests',
+ 'apps/updatenotification/composer',
'apps/updatenotification/tests',
+ 'apps/user_ldap/composer',
'apps/user_ldap/tests',
+ 'apps/workflowengine/composer',
'apps/workflowengine/tests',
],
diff --git a/config/config.sample.php b/config/config.sample.php
index ed2ecbb87b3..f8723c7d9b0 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1232,7 +1232,6 @@ $CONFIG = array(
*/
'sharing.minSearchStringLength' => 0,
-
/**
* All other configuration options
*/
diff --git a/core/Controller/AutoCompleteController.php b/core/Controller/AutoCompleteController.php
new file mode 100644
index 00000000000..2e01f85c639
--- /dev/null
+++ b/core/Controller/AutoCompleteController.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\Collaboration\AutoComplete\IManager;
+use OCP\Collaboration\Collaborators\ISearch;
+use OCP\IConfig;
+use OCP\IRequest;
+use OCP\Share;
+
+class AutoCompleteController extends Controller {
+ /** @var ISearch */
+ private $collaboratorSearch;
+ /** @var IManager */
+ private $autoCompleteManager;
+ /** @var IConfig */
+ private $config;
+
+ public function __construct(
+ $appName,
+ IRequest $request,
+ ISearch $collaboratorSearch,
+ IManager $autoCompleteManager,
+ IConfig $config
+ ) {
+ parent::__construct($appName, $request);
+
+ $this->collaboratorSearch = $collaboratorSearch;
+ $this->autoCompleteManager = $autoCompleteManager;
+ $this->config = $config;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * @param string $search
+ * @param string $itemType
+ * @param string $itemId
+ * @param string|null $sorter can be piped, top prio first, e.g.: "commenters|share-recipients"
+ * @param array $shareTypes
+ * @param int $limit
+ * @return DataResponse
+ */
+ public function get($search, $itemType, $itemId, $sorter = null, $shareTypes = [Share::SHARE_TYPE_USER], $limit = 10) {
+ // if enumeration/user listings are disabled, we'll receive an empty
+ // result from search() – thus nothing else to do here.
+ list($results,) = $this->collaboratorSearch->search($search, $shareTypes, false, $limit, 0);
+
+ $exactMatches = $results['exact'];
+ unset($results['exact']);
+ $results = array_merge_recursive($exactMatches, $results);
+
+ $sorters = array_reverse(explode('|', $sorter));
+ $this->autoCompleteManager->runSorters($sorters, $results, [
+ 'itemType' => $itemType,
+ 'itemId' => $itemId,
+ ]);
+
+ // transform to expected format
+ $results = $this->prepareResultArray($results);
+
+ return new DataResponse($results);
+ }
+
+
+ protected function prepareResultArray(array $results) {
+ $output = [];
+ foreach ($results as $type => $subResult) {
+ foreach ($subResult as $result) {
+ $output[] = [
+ 'id' => $result['value']['shareWith'],
+ 'label' => $result['label'],
+ 'source' => $type,
+ ];
+ }
+ }
+ return $output;
+ }
+}
diff --git a/core/Controller/WalledGardenController.php b/core/Controller/WalledGardenController.php
new file mode 100644
index 00000000000..737f5396779
--- /dev/null
+++ b/core/Controller/WalledGardenController.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @copyright 2017, 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 OC\Core\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Response;
+
+class WalledGardenController extends Controller {
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @return Response
+ */
+ function get() {
+ $resp = new Response();
+ $resp->setStatus(Http::STATUS_NO_CONTENT);
+ return $resp;
+ }
+}
diff --git a/core/css/guest.css b/core/css/guest.css
index dacf79b37bc..576efafec5f 100644
--- a/core/css/guest.css
+++ b/core/css/guest.css
@@ -152,7 +152,7 @@ form #datadirField legend {
applied to the button instead. */
}
-input, textarea, select, button {
+input, textarea, select, button, div[contenteditable=true] {
font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
}
input {
@@ -389,6 +389,7 @@ form .warning input[type='checkbox']+label {
margin: 10px 0;
text-align: center;
width: 100%;
+ text-shadow: 0 0 2px rgba(0, 0, 0, .4); // better readability on bright background
}
#forgot-password {
padding: 11px;
@@ -559,6 +560,7 @@ fieldset.update legend + p {
p.info {
margin: 0 auto;
padding-top: 20px;
+ text-shadow: 0 0 2px rgba(0, 0, 0, .4); // better readability on bright background
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
@@ -662,16 +664,16 @@ p.info {
margin: -9px 0 0 -9px;
}
/* Css replaced elements don't have ::after nor ::before */
-img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading {
+img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading, div[contenteditable=true].icon-loading {
background-image: url('../img/loading.gif');
}
-img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark {
+img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark, div[contenteditable=true].icon-loading-dark {
background-image: url('../img/loading-dark.gif');
}
-img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small {
+img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small, div[contenteditable=true].icon-loading-small {
background-image: url('../img/loading-small.gif');
}
-img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark {
+img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark, div[contenteditable=true].icon-loading-small-dark {
background-image: url('../img/loading-small-dark.gif');
}
@-webkit-keyframes rotate {
diff --git a/core/css/header.scss b/core/css/header.scss
index c03fa2aa0d3..1e5e2846723 100644
--- a/core/css/header.scss
+++ b/core/css/header.scss
@@ -143,6 +143,8 @@
#header-left, .header-left {
flex: 0 0;
flex-grow: 1;
+ overflow: hidden;
+ white-space: nowrap;
}
#header-right, .header-right {
diff --git a/core/css/icons.scss b/core/css/icons.scss
index 6d855381fae..bdef106e3cd 100644
--- a/core/css/icons.scss
+++ b/core/css/icons.scss
@@ -61,7 +61,7 @@
}
/* Css replaced elements don't have ::after nor ::before */
-img, object, video, button, textarea, input, select {
+img, object, video, button, textarea, input, select, div[contenteditable=true] {
.icon-loading {
background-image: url('../img/loading.gif');
}
@@ -94,6 +94,10 @@ img, object, video, button, textarea, input, select {
background-image: url('../img/actions/add.svg?v=1');
}
+.icon-address {
+ background-image: url('../img/actions/address.svg?v=1');
+}
+
.icon-audio {
background-image: url('../img/actions/audio.svg?v=1');
}
@@ -348,6 +352,10 @@ img, object, video, button, textarea, input, select {
background-image: url('../img/actions/star.svg?v=1');
}
+.icon-star-dark {
+ background-image: url('../img/actions/star-dark.svg?v=1');
+}
+
.icon-starred {
&:hover, &:focus {
background-image: url('../img/actions/star.svg?v=1');
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index eb7d20cf8af..5143ec518ed 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -13,7 +13,7 @@
*/
/* Specifically override browser styles */
-input, textarea, select, button {
+input, textarea, select, button, div[contenteditable=true] {
font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
}
.select2-container-multi .select2-choices .select2-search-field input, .select2-search input, .ui-widget {
@@ -24,7 +24,8 @@ input, textarea, select, button {
select,
button,
input,
-textarea {
+textarea,
+div[contenteditable=true] {
width: 130px;
min-height: 32px;
box-sizing: border-box;
@@ -35,6 +36,7 @@ select,
button, .button,
input:not([type='range']),
textarea,
+div[contenteditable=true],
.pager li a {
margin: 3px 3px 3px 0;
padding: 7px 6px;
@@ -154,7 +156,7 @@ button, .button {
}
}
-textarea {
+textarea, div[contenteditable=true] {
color: nc-lighten($color-main-text, 33%);
cursor: text;
font-family: inherit;
diff --git a/core/css/mobile.scss b/core/css/mobile.scss
index dbc56406aa1..aad3070e79a 100644
--- a/core/css/mobile.scss
+++ b/core/css/mobile.scss
@@ -11,11 +11,6 @@
align-items: center;
}
-/* on mobile public share, show only the icon of the logo, hide the text */
-#body-public #header .header-appname-container {
- display: none;
-}
-
/* do not show update notification on mobile */
#update-notification {
display: none !important;
diff --git a/core/img/actions/address.svg b/core/img/actions/address.svg
new file mode 100644
index 00000000000..2e4c19c125b
--- /dev/null
+++ b/core/img/actions/address.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xml:space="preserve" height="16" width="16" enable-background="new 0 0 100 100" y="0px" x="0px" viewBox="0 0 16 16"><path d="m8.2945 1c-2.6478 0-4.7945 2.1469-4.7945 4.7945 0 2.6479 4.7945 9.2055 4.7945 9.2055s4.7945-6.5576 4.7945-9.2055c0-2.6476-2.147-4.7945-4.7945-4.7945zm0 7.4793c-1.4828 0-2.6847-1.2019-2.6847-2.6851 0-1.4828 1.2019-2.6844 2.6847-2.6844 1.4832 0 2.6847 1.2015 2.6847 2.6844 0.000345 1.4832-1.2015 2.6851-2.6847 2.6851z" stroke-width=".46667"/></svg>
diff --git a/core/js/share.js b/core/js/share.js
index 659d719788d..25d59b46fb4 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -203,18 +203,19 @@ OC.Share = _.extend(OC.Share || {}, {
* @param {String} remoteAddress full remote share
* @return {String} HTML code to display
*/
- _formatRemoteShare: function(remoteAddress) {
+ _formatRemoteShare: function(remoteAddress, message) {
var parts = this._REMOTE_OWNER_REGEXP.exec(remoteAddress);
if (!parts) {
- // display as is, most likely to be a simple owner name
- return escapeHTML(remoteAddress);
+ // display avatar of the user
+ var avatar = '<span class="avatar" data-userName="' + escapeHTML(remoteAddress) + '" title="' + message + " " + escapeHTML(remoteAddress) + '"></span>';
+ var hidden = '<span class="hidden-visually">' + message + ' ' + escapeHTML(remoteAddress) + '</span> ';
+ return avatar + hidden;
}
var userName = parts[1];
var userDomain = parts[3];
var server = parts[4];
- var dir = parts[6];
- var tooltip = userName;
+ var tooltip = message + ' ' + userName;
if (userDomain) {
tooltip += '@' + userDomain;
}
@@ -230,7 +231,7 @@ OC.Share = _.extend(OC.Share || {}, {
if (userDomain) {
html += '<span class="userDomain">@' + escapeHTML(userDomain) + '</span>';
}
- html += '</span>';
+ html += '</span> ';
return html;
},
/**
@@ -243,7 +244,7 @@ OC.Share = _.extend(OC.Share || {}, {
_formatShareList: function(recipients) {
var _parent = this;
return $.map(recipients, function(recipient) {
- recipient = _parent._formatRemoteShare(recipient);
+ recipient = _parent._formatRemoteShare(recipient, t('core', 'Shared with'));
return recipient;
});
},
@@ -259,8 +260,7 @@ OC.Share = _.extend(OC.Share || {}, {
var action = $tr.find('.fileactions .action[data-action="Share"]');
var type = $tr.data('type');
var icon = action.find('.icon');
- var message;
- var recipients;
+ var message, recipients, avatars;
var owner = $tr.attr('data-share-owner');
var shareFolderIcon;
var iconClass = 'icon-shared';
@@ -294,20 +294,23 @@ OC.Share = _.extend(OC.Share || {}, {
recipients = $tr.attr('data-share-recipients');
action.addClass('shared-style');
- message = t('core', 'Shared');
+ avatars = '<span>' + t('core', 'Shared') + '</span>';
// even if reshared, only show "Shared by"
if (owner) {
- message = this._formatRemoteShare(owner);
+ message = t('core', 'Shared by');
+ avatars = this._formatRemoteShare(owner, message);
+ } else if (recipients) {
+ avatars = this._formatShareList(recipients.split(', ')).join('');
}
- else if (recipients) {
- message = t('core', 'Shared with {recipients}', {recipients: this._formatShareList(recipients.split(", ")).join(", ")}, 0, {escape: false});
- }
- action.html('<span> ' + message + '</span>').prepend(icon);
+ action.html(avatars).prepend(icon);
+
if (owner || recipients) {
- action.find('.remoteAddress').tooltip({placement: 'top'});
+ var avatarElement = action.find('.avatar');
+ avatarElement.avatar(avatarElement.data('username'), 32);
+
+ action.find('.icon-shared + span').tooltip({placement: 'top'});
}
- }
- else {
+ } else {
action.html('<span class="hidden-visually">' + t('core', 'Shared') + '</span>').prepend(icon);
}
if (hasLink) {
diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js
index fbf6eecc8df..70c698c99a2 100644
--- a/core/js/tests/specs/shareSpec.js
+++ b/core/js/tests/specs/shareSpec.js
@@ -47,7 +47,7 @@ describe('OC.Share tests', function() {
$file.attr('data-share-owner', input);
OC.Share.markFileAsShared($file);
- $action = $file.find('.action-share>span');
+ $action = $file.find('.action-share>span').parent();
expect($action.text().trim()).toEqual(output);
if (_.isString(title)) {
expect($action.find('.remoteAddress').attr('title')).toEqual(title);
@@ -58,41 +58,41 @@ describe('OC.Share tests', function() {
tooltipStub.reset();
}
- it('displays the local share owner as is', function() {
- checkOwner('User One', 'User One', null);
+ it('displays the local share owner with "Shared by" prefix', function() {
+ checkOwner('User One', 'Shared by User One', null);
});
it('displays the user name part of a remote share owner', function() {
checkOwner(
'User One@someserver.com',
'User One@…',
- 'User One@someserver.com'
+ 'Shared by User One@someserver.com'
);
checkOwner(
'User One@someserver.com/',
'User One@…',
- 'User One@someserver.com'
+ 'Shared by User One@someserver.com'
);
checkOwner(
'User One@someserver.com/root/of/owncloud',
'User One@…',
- 'User One@someserver.com'
+ 'Shared by User One@someserver.com'
);
});
it('displays the user name part with domain of a remote share owner', function() {
checkOwner(
'User One@example.com@someserver.com',
'User One@example.com',
- 'User One@example.com@someserver.com'
+ 'Shared by User One@example.com@someserver.com'
);
checkOwner(
'User One@example.com@someserver.com/',
'User One@example.com',
- 'User One@example.com@someserver.com'
+ 'Shared by User One@example.com@someserver.com'
);
checkOwner(
'User One@example.com@someserver.com/root/of/owncloud',
'User One@example.com',
- 'User One@example.com@someserver.com'
+ 'Shared by User One@example.com@someserver.com'
);
});
});
@@ -151,14 +151,14 @@ describe('OC.Share tests', function() {
});
});
- describe('displaying the recipoients', function() {
+ describe('displaying the recipients', function() {
function checkRecipients(input, output, title) {
var $action;
$file.attr('data-share-recipients', input);
OC.Share.markFileAsShared($file, true);
- $action = $file.find('.action-share>span');
+ $action = $file.find('.action-share>span').parent();
expect($action.text().trim()).toEqual(output);
if (_.isString(title)) {
expect($action.find('.remoteAddress').attr('title')).toEqual(title);
@@ -182,62 +182,61 @@ describe('OC.Share tests', function() {
it('displays the user name part of a remote recipient', function() {
checkRecipients(
'User One@someserver.com',
- 'Shared with User One@…',
- 'User One@someserver.com'
+ 'User One@…',
+ 'Shared with User One@someserver.com'
);
checkRecipients(
'User One@someserver.com/',
- 'Shared with User One@…',
- 'User One@someserver.com'
+ 'User One@…',
+ 'Shared with User One@someserver.com'
);
checkRecipients(
'User One@someserver.com/root/of/owncloud',
- 'Shared with User One@…',
- 'User One@someserver.com'
+ 'User One@…',
+ 'Shared with User One@someserver.com'
);
});
it('displays the user name part with domain of a remote share owner', function() {
checkRecipients(
'User One@example.com@someserver.com',
- 'Shared with User One@example.com',
- 'User One@example.com@someserver.com'
+ 'User One@example.com',
+ 'Shared with User One@example.com@someserver.com'
);
checkRecipients(
'User One@example.com@someserver.com/',
- 'Shared with User One@example.com',
- 'User One@example.com@someserver.com'
+ 'User One@example.com',
+ 'Shared with User One@example.com@someserver.com'
);
checkRecipients(
'User One@example.com@someserver.com/root/of/owncloud',
- 'Shared with User One@example.com',
- 'User One@example.com@someserver.com'
+ 'User One@example.com',
+ 'Shared with User One@example.com@someserver.com'
);
});
it('display multiple remote recipients', function() {
checkRecipients(
'One@someserver.com, two@otherserver.com',
- 'Shared with One@…, two@…',
- ['One@someserver.com', 'two@otherserver.com']
+ 'One@… two@…',
+ ['Shared with One@someserver.com', 'Shared with two@otherserver.com']
);
checkRecipients(
'One@someserver.com/, two@otherserver.com',
- 'Shared with One@…, two@…',
- ['One@someserver.com', 'two@otherserver.com']
+ 'One@… two@…',
+ ['Shared with One@someserver.com', 'Shared with two@otherserver.com']
);
checkRecipients(
'One@someserver.com/root/of/owncloud, two@otherserver.com',
- 'Shared with One@…, two@…',
- ['One@someserver.com', 'two@otherserver.com']
+ 'One@… two@…',
+ ['Shared with One@someserver.com', 'Shared with two@otherserver.com']
);
});
it('display mixed recipients', function() {
checkRecipients(
'One, two@otherserver.com',
- 'Shared with One, two@…',
- ['two@otherserver.com']
+ 'Shared with One two@…',
+ ['Shared with two@otherserver.com']
);
});
});
});
});
-
diff --git a/core/l10n/ast.js b/core/l10n/ast.js
index 93f9b3de1d7..0efe5fa3bf8 100644
--- a/core/l10n/ast.js
+++ b/core/l10n/ast.js
@@ -98,7 +98,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El to restolador web entá nun ta configuráu afayadizamente pa permitir la sincronización de ficheros porque la interfaz WebDAV paez tar rota.",
"Error occurred while checking server setup" : "Fallu entrín se comprobaba la configruación del sirvidor",
"Shared" : "Compartíu",
- "Shared with {recipients}" : "Compartío con {recipients}",
"Error setting expiration date" : "Fallu afitando la fecha de caducidá",
"The public link will expire no later than {days} days after it is created" : "L'enllaz públicu va caducar enantes de {days} díes dende la so creación",
"Set expiration date" : "Afitar la data de caducidá",
@@ -252,6 +251,7 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Problema cargando la páxina, recargando en 5 segundos",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Los tos ficheros tán crifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que se reanicie la to contraseña.<br />Si nun tas seguru de qué facer, por favor contauta col to alministrador enantes que sigas. <br />¿De xuru quies siguir?",
"Ok" : "Aceutar",
+ "Shared with {recipients}" : "Compartío con {recipients}",
"Error while unsharing" : "Fallu mientres se dexaba de compartir",
"can edit" : "pue editar",
"can create" : "pue crear",
diff --git a/core/l10n/ast.json b/core/l10n/ast.json
index 5f640be2e47..4d83e14449d 100644
--- a/core/l10n/ast.json
+++ b/core/l10n/ast.json
@@ -96,7 +96,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El to restolador web entá nun ta configuráu afayadizamente pa permitir la sincronización de ficheros porque la interfaz WebDAV paez tar rota.",
"Error occurred while checking server setup" : "Fallu entrín se comprobaba la configruación del sirvidor",
"Shared" : "Compartíu",
- "Shared with {recipients}" : "Compartío con {recipients}",
"Error setting expiration date" : "Fallu afitando la fecha de caducidá",
"The public link will expire no later than {days} days after it is created" : "L'enllaz públicu va caducar enantes de {days} díes dende la so creación",
"Set expiration date" : "Afitar la data de caducidá",
@@ -250,6 +249,7 @@
"Problem loading page, reloading in 5 seconds" : "Problema cargando la páxina, recargando en 5 segundos",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Los tos ficheros tán crifraos. Si nun habilitesti la clave de recuperación, nun habrá forma de recuperar los tos datos dempués de que se reanicie la to contraseña.<br />Si nun tas seguru de qué facer, por favor contauta col to alministrador enantes que sigas. <br />¿De xuru quies siguir?",
"Ok" : "Aceutar",
+ "Shared with {recipients}" : "Compartío con {recipients}",
"Error while unsharing" : "Fallu mientres se dexaba de compartir",
"can edit" : "pue editar",
"can create" : "pue crear",
diff --git a/core/l10n/bg.js b/core/l10n/bg.js
index 06579226f53..429a32f0620 100644
--- a/core/l10n/bg.js
+++ b/core/l10n/bg.js
@@ -100,7 +100,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP хедъра на \"Strict-Transport-Security\" не е конфигуриран за най-малко \"{seconds}\" секунди. За по-голяма сигурност Ви препоръчваме да активирате HSTS, както е описано в нашите <a href=\"{docUrl}\" rel=\"noreferrer\">съвети за сигурност</a>..",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Достъпвате сайта чрез HTTP. Препоръчително е да настроите сървъра да изисква употребата на HTTPS, както е описано в <a href=\"{docUrl}\">съветите за сигурност</a>.",
"Shared" : "Споделено",
- "Shared with {recipients}" : "Споделено с {recipients}",
"Error setting expiration date" : "Грешка при настройване на датата за изтичане",
"The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.",
"Set expiration date" : "Задаване на дата на изтичане",
@@ -248,6 +247,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете Ви са криптирани. Ако не сте настроили ключ за възстановяване, няма да можете да възстановите данните си след смяна на паролата.<br />Ако не сте сигурни какво да направите, моля, свържете се с Вашия администратор преди да продължите. <br/>Наистина ли желаете да продължите?",
"Ok" : "Добре",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Най-вероятно вашите данни и файлове са достъпни от интернет. .htaccess файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "Shared with {recipients}" : "Споделено с {recipients}",
"Error while unsharing" : "Грешка при премахване на споделянето",
"can reshare" : "може да споделя",
"can edit" : "може да променя",
diff --git a/core/l10n/bg.json b/core/l10n/bg.json
index f7fe7026d45..4971f27eeb6 100644
--- a/core/l10n/bg.json
+++ b/core/l10n/bg.json
@@ -98,7 +98,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP хедъра на \"Strict-Transport-Security\" не е конфигуриран за най-малко \"{seconds}\" секунди. За по-голяма сигурност Ви препоръчваме да активирате HSTS, както е описано в нашите <a href=\"{docUrl}\" rel=\"noreferrer\">съвети за сигурност</a>..",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Достъпвате сайта чрез HTTP. Препоръчително е да настроите сървъра да изисква употребата на HTTPS, както е описано в <a href=\"{docUrl}\">съветите за сигурност</a>.",
"Shared" : "Споделено",
- "Shared with {recipients}" : "Споделено с {recipients}",
"Error setting expiration date" : "Грешка при настройване на датата за изтичане",
"The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.",
"Set expiration date" : "Задаване на дата на изтичане",
@@ -246,6 +245,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Файловете Ви са криптирани. Ако не сте настроили ключ за възстановяване, няма да можете да възстановите данните си след смяна на паролата.<br />Ако не сте сигурни какво да направите, моля, свържете се с Вашия администратор преди да продължите. <br/>Наистина ли желаете да продължите?",
"Ok" : "Добре",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Най-вероятно вашите данни и файлове са достъпни от интернет. .htaccess файлът не функционира. Силно препоръчваме да настроите уеб сървъра по такъв начин, че директорията за данни да не бъде достъпна или я преместете извън директорията на уеб сървъра.",
+ "Shared with {recipients}" : "Споделено с {recipients}",
"Error while unsharing" : "Грешка при премахване на споделянето",
"can reshare" : "може да споделя",
"can edit" : "може да променя",
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index 454f6caba7f..97f6e25fb74 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "La capçalera HTTP “Strict-Transport-Security” no està configurada a un mínim de “{seconds}” segons. Per millor seguretat recomanem permetre HSTS com es descriu en els nostres <a href=\"{docUrl}\" rel=\"noreferrer\">consells de seguretat</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>.",
"Shared" : "Compartit",
- "Shared with {recipients}" : "Compartit amb {recipients}",
"Error setting expiration date" : "Error en establir la data de venciment",
"The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo",
"Set expiration date" : "Estableix la data de venciment",
@@ -312,6 +311,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. <br />Si sabeu què fer, contacteu amb l'administrador abans de continuar.<br />Voleu continuar?",
"Ok" : "D'acord",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
+ "Shared with {recipients}" : "Compartit amb {recipients}",
"Error while unsharing" : "Error en deixar de compartir",
"can reshare" : "pot recompartir",
"can edit" : "pot editar",
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
index f77a61a463d..58ca576af6f 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "La capçalera HTTP “Strict-Transport-Security” no està configurada a un mínim de “{seconds}” segons. Per millor seguretat recomanem permetre HSTS com es descriu en els nostres <a href=\"{docUrl}\" rel=\"noreferrer\">consells de seguretat</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>.",
"Shared" : "Compartit",
- "Shared with {recipients}" : "Compartit amb {recipients}",
"Error setting expiration date" : "Error en establir la data de venciment",
"The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo",
"Set expiration date" : "Estableix la data de venciment",
@@ -310,6 +309,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Els vostres fitxers estan encriptats. Si no heu habilitat la clau de recuperació no hi haurà manera de recuperar les dades després que reestabliu la contrasenya. <br />Si sabeu què fer, contacteu amb l'administrador abans de continuar.<br />Voleu continuar?",
"Ok" : "D'acord",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.",
+ "Shared with {recipients}" : "Compartit amb {recipients}",
"Error while unsharing" : "Error en deixar de compartir",
"can reshare" : "pot recompartir",
"can edit" : "pot editar",
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index 10ad4aff0db..8ded1a3d4a8 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\" rel=\"noreferrer\">bezpečnostních tipech</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Přistupujete na tuto stránku přes protokol HTTP. Důrazně doporučujeme nakonfigurovat server tak, aby vyžadoval použití HTTPS jak je popsáno v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.",
"Shared" : "Sdílené",
- "Shared with {recipients}" : "Sdíleno s {recipients}",
"Error setting expiration date" : "Chyba při nastavení data vypršení platnosti",
"The public link will expire no later than {days} days after it is created" : "Veřejný odkaz vyprší nejpozději {days} dní od svého vytvoření",
"Set expiration date" : "Nastavit datum vypršení platnosti",
@@ -312,6 +311,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
+ "Shared with {recipients}" : "Sdíleno s {recipients}",
"Error while unsharing" : "Chyba při rušení sdílení",
"can reshare" : "Může znovu sdílet",
"can edit" : "lze upravovat",
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index f13530970ae..39feb342124 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\" rel=\"noreferrer\">bezpečnostních tipech</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Přistupujete na tuto stránku přes protokol HTTP. Důrazně doporučujeme nakonfigurovat server tak, aby vyžadoval použití HTTPS jak je popsáno v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.",
"Shared" : "Sdílené",
- "Shared with {recipients}" : "Sdíleno s {recipients}",
"Error setting expiration date" : "Chyba při nastavení data vypršení platnosti",
"The public link will expire no later than {days} days after it is created" : "Veřejný odkaz vyprší nejpozději {days} dní od svého vytvoření",
"Set expiration date" : "Nastavit datum vypršení platnosti",
@@ -310,6 +309,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vaše soubory jsou šifrovány. Pokud jste nepovolili klíč pro obnovení, neexistuje způsob jak získat po změně hesla vaše data zpět.<br />Pokud si nejste jisti co dělat, kontaktujte nejprve svého správce systému, než budete pokračovat. <br />Opravdu si přejete pokračovat?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.",
+ "Shared with {recipients}" : "Sdíleno s {recipients}",
"Error while unsharing" : "Chyba při rušení sdílení",
"can reshare" : "Může znovu sdílet",
"can edit" : "lze upravovat",
diff --git a/core/l10n/da.js b/core/l10n/da.js
index 24cb3280918..a0286d1e7d2 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP headeren \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For bedre sikkerhed anbefaler vi at aktivere HSTS som beskrevet i vores <a href=\"{docUrl}\" rel=\"noreferrer\">sikkerhedstips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du tilgår dette sted gennem HTTP. Vi anbefaler kraftigt at du konfigurerer din server, så der kræves brug af HTTPS i stedet for, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.",
"Shared" : "Delt",
- "Shared with {recipients}" : "Delt med {recipients}",
"Error setting expiration date" : "Fejl under sætning af udløbsdato",
"The public link will expire no later than {days} days after it is created" : "Det offentlige link udløber senest {days} dage efter det blev oprettet",
"Set expiration date" : "Vælg udløbsdato",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod.",
+ "Shared with {recipients}" : "Delt med {recipients}",
"Error while unsharing" : "Fejl under annullering af deling",
"can reshare" : "kan gendele",
"can edit" : "kan redigere",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index bfa7d422058..34d1b52be89 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP headeren \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For bedre sikkerhed anbefaler vi at aktivere HSTS som beskrevet i vores <a href=\"{docUrl}\" rel=\"noreferrer\">sikkerhedstips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du tilgår dette sted gennem HTTP. Vi anbefaler kraftigt at du konfigurerer din server, så der kræves brug af HTTPS i stedet for, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.",
"Shared" : "Delt",
- "Shared with {recipients}" : "Delt med {recipients}",
"Error setting expiration date" : "Fejl under sætning af udløbsdato",
"The public link will expire no later than {days} days after it is created" : "Det offentlige link udløber senest {days} dage efter det blev oprettet",
"Set expiration date" : "Vælg udløbsdato",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dine filer er krypterede. Hvis du ikke har aktiveret gendannelsesnøglen kan du ikke få dine data tilbage efter at du har ændret adgangskode.<br />Hvis du ikke er sikker på, hvad du skal gøre så kontakt din administrator før du fortsætter.<br />Vil du fortsætte?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod.",
+ "Shared with {recipients}" : "Delt med {recipients}",
"Error while unsharing" : "Fejl under annullering af deling",
"can reshare" : "kan gendele",
"can edit" : "kan redigere",
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 0c43389a016..96d6dd878a0 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Der \"Strict-Transport-Security\" HTTP-Header ist nicht auf mindestens \"{seconds}\" Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" rel=\"noreferrer\">Sicherheitshinweisen</a> erläutert ist.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du greifst auf diese Site über HTTP zu. Wir raten dringend dazu, deinen Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.",
"Shared" : "Geteilt",
- "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen",
"Set expiration date" : "Setze ein Ablaufdatum",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Alternative Anmeldung",
"Account access" : "Kontozugriff ",
"You are about to grant %s access to your %s account." : "Du bist dabei, %s Zugriff auf Dein %s-Konto zu gewähren.",
+ "Grant access" : "Zugriff gewähren",
"App token" : "App-Token",
"Alternative login using app token" : "Alternative Anmeldung via App-Token",
"Redirecting …" : "Weiterleiten…",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass du es aus dem Dokument-Root-Verzeichnis des Webservers bewegst.",
+ "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error while unsharing" : "Fehler beim Aufheben der Freigabe",
"can reshare" : "kann weiterteilen",
"can edit" : "kann bearbeiten",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 78d850c4129..3066596959a 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Der \"Strict-Transport-Security\" HTTP-Header ist nicht auf mindestens \"{seconds}\" Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" rel=\"noreferrer\">Sicherheitshinweisen</a> erläutert ist.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du greifst auf diese Site über HTTP zu. Wir raten dringend dazu, deinen Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.",
"Shared" : "Geteilt",
- "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen",
"Set expiration date" : "Setze ein Ablaufdatum",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Alternative Anmeldung",
"Account access" : "Kontozugriff ",
"You are about to grant %s access to your %s account." : "Du bist dabei, %s Zugriff auf Dein %s-Konto zu gewähren.",
+ "Grant access" : "Zugriff gewähren",
"App token" : "App-Token",
"Alternative login using app token" : "Alternative Anmeldung via App-Token",
"Redirecting …" : "Weiterleiten…",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Solltest du den Wiederherstellungsschlüssel nicht aktiviert haben, gibt es keine Möglichkeit, deine Daten zurückzuerlangen, nachdem dein Passwort zurückgesetzt wurde.<br />Falls du dir nicht sicher bist, was zu tun ist, kontaktiere bitte deinen Administrator, bevor du fortfährst<br />Möchtest du wirklich fortfahren?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass du es aus dem Dokument-Root-Verzeichnis des Webservers bewegst.",
+ "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error while unsharing" : "Fehler beim Aufheben der Freigabe",
"can reshare" : "kann weiterteilen",
"can edit" : "kann bearbeiten",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 4be3dc6addd..91bb5a23e45 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Der \"Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens \"{seconds}“ Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" rel=\"noreferrer\">Sicherheitshinweisen</a> erläutert ist.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sie greifen auf diese Site über HTTP zu. Wir raten dringend dazu, Ihren Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.",
"Shared" : "Geteilt",
- "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen",
"Set expiration date" : "Ein Ablaufdatum setzen",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Alternative Anmeldung",
"Account access" : "Kontozugriff ",
"You are about to grant %s access to your %s account." : "Sie sind dabei, %s Zugriff auf Ihr %s-Konto zu gewähren.",
+ "Grant access" : "Zugriff gewähren",
"App token" : "App-Token",
"Alternative login using app token" : "Alternative Anmeldung via App-Token",
"Redirecting …" : "Weiterleiten…",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
+ "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error while unsharing" : "Fehler beim Aufheben der Freigabe",
"can reshare" : "kann weiterteilen",
"can edit" : "kann bearbeiten",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index a75fc5667f7..09700b7bfa2 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Der \"Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens \"{seconds}“ Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" rel=\"noreferrer\">Sicherheitshinweisen</a> erläutert ist.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sie greifen auf diese Site über HTTP zu. Wir raten dringend dazu, Ihren Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.",
"Shared" : "Geteilt",
- "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums",
"The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen",
"Set expiration date" : "Ein Ablaufdatum setzen",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Alternative Anmeldung",
"Account access" : "Kontozugriff ",
"You are about to grant %s access to your %s account." : "Sie sind dabei, %s Zugriff auf Ihr %s-Konto zu gewähren.",
+ "Grant access" : "Zugriff gewähren",
"App token" : "App-Token",
"Alternative login using app token" : "Alternative Anmeldung via App-Token",
"Redirecting …" : "Weiterleiten…",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Wenn Sie den Wiederherstellungsschlüssel nicht aktiviert haben, wird es keine Möglichkeit geben, um Ihre Daten wieder zu erhalten, nachdem Ihr Passwort zurückgesetzt wurde.<br />Wenn Sie sich nicht sicher sind, was Sie tun sollen, wenden Sie sich bitte an Ihren Administrator, bevor Sie fortfahren.<br />Wollen Sie wirklich fortfahren?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.",
+ "Shared with {recipients}" : "Geteilt mit {recipients}",
"Error while unsharing" : "Fehler beim Aufheben der Freigabe",
"can reshare" : "kann weiterteilen",
"can edit" : "kann bearbeiten",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 6c552368c6e..f724f6dac1a 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -122,7 +122,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Η \"Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\" rel=\"noreferrer\">συμβουλές ασφαλείας</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">συμβουλές ασφαλείας</a>.",
"Shared" : "Κοινόχρηστα",
- "Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
"Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημερομηνίας λήξης",
"The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ σε {days} ημέρες μετά την δημιουργία του",
"Set expiration date" : "Ορισμός ημερομηνίας λήξης",
@@ -302,6 +301,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του συνθηματικού σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε να συνεχίσετε;",
"Ok" : "ΟΚ",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν προσβάσιμα από το διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του ριζικού καταλόγου εγγράφων του διακομιστή.",
+ "Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
"Error while unsharing" : "Σφάλμα κατά την αναίρεση του διαμοιρασμού",
"can reshare" : "δυνατότητα να διαμοιραστεί ξανά",
"can edit" : "δυνατότητα αλλαγής",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 2b16448cd1d..510d52e06cf 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -120,7 +120,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Η \"Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\" rel=\"noreferrer\">συμβουλές ασφαλείας</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">συμβουλές ασφαλείας</a>.",
"Shared" : "Κοινόχρηστα",
- "Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
"Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημερομηνίας λήξης",
"The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ σε {days} ημέρες μετά την δημιουργία του",
"Set expiration date" : "Ορισμός ημερομηνίας λήξης",
@@ -300,6 +299,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του συνθηματικού σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε να συνεχίσετε;",
"Ok" : "ΟΚ",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν προσβάσιμα από το διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του ριζικού καταλόγου εγγράφων του διακομιστή.",
+ "Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
"Error while unsharing" : "Σφάλμα κατά την αναίρεση του διαμοιρασμού",
"can reshare" : "δυνατότητα να διαμοιραστεί ξανά",
"can edit" : "δυνατότητα αλλαγής",
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index a67257977b9..8b9312e4284 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Shared",
- "Shared with {recipients}" : "Shared with {recipients}",
"Error setting expiration date" : "Error setting expiration date",
"The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created",
"Set expiration date" : "Set expiration date",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.",
+ "Shared with {recipients}" : "Shared with {recipients}",
"Error while unsharing" : "Error whilst unsharing",
"can reshare" : "can reshare",
"can edit" : "can edit",
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 1e762d6dbee..66bbbc67fe3 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Shared",
- "Shared with {recipients}" : "Shared with {recipients}",
"Error setting expiration date" : "Error setting expiration date",
"The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created",
"Set expiration date" : "Set expiration date",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.",
+ "Shared with {recipients}" : "Shared with {recipients}",
"Error while unsharing" : "Error whilst unsharing",
"can reshare" : "can reshare",
"can edit" : "can edit",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index 466279a7994..cdf89bcd198 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{seconds}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como se describe en <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está ingresando a este sitio de internet vía HTTP. Le sugerimos enérgicamente que configure su servidor que utilice HTTPS como se describe en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Error estableciendo fecha de caducidad",
"The public link will expire no later than {days} days after it is created" : "El vínculo público no expirará antes de {days} desde que se creó",
"Set expiration date" : "Establecer fecha de caducidad",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"Ok" : "Aceptar",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Error al dejar de compartir",
"can reshare" : "puede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 4bab17131a4..9c3837dbb54 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{seconds}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como se describe en <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está ingresando a este sitio de internet vía HTTP. Le sugerimos enérgicamente que configure su servidor que utilice HTTPS como se describe en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Error estableciendo fecha de caducidad",
"The public link will expire no later than {days} days after it is created" : "El vínculo público no expirará antes de {days} desde que se creó",
"Set expiration date" : "Establecer fecha de caducidad",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos una vez su contraseña sea restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"Ok" : "Aceptar",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Error al dejar de compartir",
"can reshare" : "puede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es_AR.js b/core/l10n/es_AR.js
index 5576fb87495..03a744a5d00 100644
--- a/core/l10n/es_AR.js
+++ b/core/l10n/es_AR.js
@@ -122,7 +122,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, le recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Usted está accediendo este sitio via HTTP. Le recomendamos ámpliamente que configure su servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "El link público expirará a los {days} días de haber sido creado",
"Set expiration date" : "Establecer la fecha de expiración",
@@ -304,6 +303,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están encriptados. Si no ha habilitado la llave de recuperación, no habrá manera de que pueda recuperar sus datos una vez que restablezca su contraseña.<br />Si no está seguro de lo que está haciendo, favor de contactar a su adminstrador antes de continuar. <br />¿Realmente desea continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente sus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Le recomendamos ámpliamente que configure su servidor web de tal modo que el directorio de datos no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Se presentó un error al dejar de compartir",
"can reshare" : "pruede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es_AR.json b/core/l10n/es_AR.json
index 06b84fdec1b..514cd294c4c 100644
--- a/core/l10n/es_AR.json
+++ b/core/l10n/es_AR.json
@@ -120,7 +120,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, le recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Usted está accediendo este sitio via HTTP. Le recomendamos ámpliamente que configure su servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "El link público expirará a los {days} días de haber sido creado",
"Set expiration date" : "Establecer la fecha de expiración",
@@ -302,6 +301,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están encriptados. Si no ha habilitado la llave de recuperación, no habrá manera de que pueda recuperar sus datos una vez que restablezca su contraseña.<br />Si no está seguro de lo que está haciendo, favor de contactar a su adminstrador antes de continuar. <br />¿Realmente desea continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente sus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Le recomendamos ámpliamente que configure su servidor web de tal modo que el directorio de datos no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Se presentó un error al dejar de compartir",
"can reshare" : "pruede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es_CO.js b/core/l10n/es_CO.js
index 6239f9520c3..2572a49ed86 100644
--- a/core/l10n/es_CO.js
+++ b/core/l10n/es_CO.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
"Set expiration date" : "Selecciona la vigencia de tu archivo",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Accesos Alternativos",
"Account access" : "Acceo de cuenta",
"You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
"App token" : "Ficha de la aplicación",
"Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
"Redirecting …" : "Redireccionando ... ",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Se presentó un error al dejar de compartir",
"can reshare" : "puede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es_CO.json b/core/l10n/es_CO.json
index e5f21d06910..02d82b31876 100644
--- a/core/l10n/es_CO.json
+++ b/core/l10n/es_CO.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
"Set expiration date" : "Selecciona la vigencia de tu archivo",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Accesos Alternativos",
"Account access" : "Acceo de cuenta",
"You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
"App token" : "Ficha de la aplicación",
"Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
"Redirecting …" : "Redireccionando ... ",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Se presentó un error al dejar de compartir",
"can reshare" : "puede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es_CR.js b/core/l10n/es_CR.js
new file mode 100644
index 00000000000..2572a49ed86
--- /dev/null
+++ b/core/l10n/es_CR.js
@@ -0,0 +1,357 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Por favor selecciona un archivo.",
+ "File is too big" : "El archivo es demasiado grande.",
+ "The selected file is not an image." : "El archivo seleccionado no es una imagen.",
+ "The selected file cannot be read." : "El archivo seleccionado no se puede leer.",
+ "Invalid file provided" : "Archivo proporcionado inválido",
+ "No image or file provided" : "No se especificó un archivo o imagen",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "An error occurred. Please contact your admin." : "Se presentó un error. Por favor contacta a tu adminsitrador. ",
+ "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, por favor inténtalo de nuevo",
+ "No crop data provided" : "No se han proporcionado datos del recorte",
+ "No valid crop data provided" : "No se han proporcionado datos válidos del recorte",
+ "Crop is not square" : "El recorte no es cuadrado",
+ "State token does not match" : "La ficha de estado no corresponde",
+ "Password reset is disabled" : "Restablecer contraseña se encuentra deshabilitado",
+ "Couldn't reset password because the token is invalid" : "No ha sido posible restablecer la contraseña porque la ficha es inválida",
+ "Couldn't reset password because the token is expired" : "No ha sido posible restablecer la contraseña porque la ficha ha expirado",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Por favor contacta a tu adminsitrador. ",
+ "%s password reset" : "%s restablecer la contraseña",
+ "Password reset" : "Restablecer contraseña",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en el siguiente botón para restablecer tu contraseña. Si no has solicitado restablecer su contraseña, por favor ignora este correo. ",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en la siguiente liga para restablecer su contraseña. Si no has solicitado restablecer la contraseña, por favor ignora este mensaje. ",
+ "Reset your password" : "Restablecer tu contraseña",
+ "Couldn't send reset email. Please contact your administrator." : "No fue posible enviar el correo de restauración. Por favor contacta a tu adminsitrador. ",
+ "Couldn't send reset email. Please make sure your username is correct." : "No fue posible restablecer el correo electrónico. Por favor asegurarte de que tu nombre de usuario sea correcto. ",
+ "Preparing update" : "Preparando actualización",
+ "[%d / %d]: %s" : "[%d / %d]: %s ",
+ "Repair warning: " : "Advertencia de reparación:",
+ "Repair error: " : "Error de reparación: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor usa el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabla %s",
+ "Turned on maintenance mode" : "Modo mantenimiento activado",
+ "Turned off maintenance mode" : "Modo mantenimiento desactivado",
+ "Maintenance mode is kept active" : "El modo mantenimiento sigue activo",
+ "Updating database schema" : "Actualizando esquema de base de datos",
+ "Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando si el archivo del esquema de base de datos puede ser actualizado (esto puedo tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update" : "Actualización del esquema de base de datos verificada",
+ "Checking updates of apps" : "Verificando actualizaciones para aplicaciones",
+ "Checking for update of app \"%s\" in appstore" : "Verificando actualizaciones para la aplicacion \"%s\" en la appstore",
+ "Update app \"%s\" from appstore" : "Actualizar la aplicación \"%s\" desde la appstore",
+ "Checked for update of app \"%s\" in appstore" : "Se verificaron actualizaciones para la aplicación \"%s\" en la appstore",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update for apps" : "Se verificó la actualización del esquema de la base de datos para las aplicaciones",
+ "Updated \"%s\" to %s" : "Actualizando \"%s\" a %s",
+ "Set log level to debug" : "Establecer nivel de bitacora a depurar",
+ "Reset log level" : "Restablecer nivel de bitácora",
+ "Starting code integrity check" : "Comenzando verificación de integridad del código",
+ "Finished code integrity check" : "Terminó la verificación de integridad del código ",
+ "%s (3rdparty)" : "%s (de 3ros)",
+ "%s (incompatible)" : "%s (incompatible)",
+ "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s",
+ "Already up to date" : "Ya está actualizado",
+ "Search contacts …" : "Buscar contactos ...",
+ "No contacts found" : "No se encontraron contactos",
+ "Show all contacts …" : "Mostrar todos los contactos ...",
+ "There was an error loading your contacts" : "Se presentó un error al cargar tus contactos",
+ "Loading your contacts …" : "Cargando sus contactos ... ",
+ "Looking for {term} …" : "Buscando {term} ...",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Más información ...</a>",
+ "No action available" : "No hay acciones disponibles",
+ "Error fetching contact actions" : "Se presentó un error al traer las acciónes de contatos",
+ "Settings" : "Configuraciones ",
+ "Connection to server lost" : "Se ha perdido la conexión con el servidor",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"],
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Descartar",
+ "This action requires you to confirm your password" : "Esta acción requiere que confirmes tu contraseña",
+ "Authentication required" : "Se requiere autenticación",
+ "Password" : "Contraseña",
+ "Cancel" : "Cancelar",
+ "Confirm" : "Confirmar",
+ "Failed to authenticate, try again" : "Falla en la autenticación, por favor reintentalo",
+ "seconds ago" : "hace segundos",
+ "Logging in …" : "Iniciando sesión ...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "La liga para restablecer tu contraseña ha sido enviada a tu correo electrónico. Si no lo recibes dentro de un tiempo razonable, verifica las carpetas de spam/basura.<br>Si no la encuentras consulta a tu adminstrador local.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. No habrá manera de recuperar tus datos una vez que restablezca tu contraseña. <br />Si no estás seguro de qué hacer, por favor contacta a tu administrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "I know what I'm doing" : "Sé lo que estoy haciendo",
+ "Password can not be changed. Please contact your administrator." : "Las contraseñas no se pueden cambiar. Por favor contacta a tu adminstrador",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hay archivos aquí",
+ "Choose" : "Seleccionar",
+ "Copy" : "Copiar",
+ "Move" : "Mover",
+ "Error loading file picker template: {error}" : "Se presentó un error al cargar la plantilla del seleccionador de archivos: {error}",
+ "OK" : "OK",
+ "Error loading message template: {error}" : "Se presentó un error al cargar la plantilla del mensaje: {error}",
+ "read-only" : "sólo-lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos en el archivo"],
+ "One file conflict" : "Un conflicto en el archivo",
+ "New Files" : "Archivos Nuevos",
+ "Already existing files" : "Archivos ya existentes",
+ "Which files do you want to keep?" : "¿Cuales archivos deseas mantener?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si seleccionas ambas versiones, se le agregará un número al nombre del archivo copiado.",
+ "Continue" : "Continuar",
+ "(all selected)" : "(todos seleccionados)",
+ "({count} selected)" : "({count} seleccionados)",
+ "Error loading file exists template" : "Se presentó un error al cargar la plantilla de existe archivo ",
+ "Pending" : "Pendiente",
+ "Copy to {folder}" : "Copiar a {folder}",
+ "Move to {folder}" : "Mover a {folder}",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Tu servidor web aún no se encuentra correctamente configurado para permitir la sincronización de archivos porque la interface de WebDAV parece estar rota. ",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Tu servidor web no está correctamente configurado para resolver \"{url}\". Puedes encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "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. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no cuenta con una conexión a Internet: No fue posible alcanzar diversos puntos de acceso <EndPoints>. Esto significa que algunas funcionalidades como el montaje de almacenamiento externo, notificaciónes de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Acceder archivos de forma remota y el envío de correos electrónicos de notificación puede que tampoco funcionen. Te sugerimos habilitar la conexión a Internet para este servidor si deseas contar con todas las características.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No ha sido configurada la memoria caché. Por favor configura un memechache si está disponible para mejorar el desempeño. Puedes encontrar información adicional en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No fue posible leer /dev/urandom por PHP que es altamente desalentado por razones de seguridad. Puedes obtener más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Estás usando PHP {version}. Te recomendamos actualizar tu versión de PHP para aprovechar <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">las actualizaciones de seguridad y desempeño suministradas por el Grupo PHP</a> tan pronto como tu distribución lo soporte. ",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de los encabezados del proxy inverso es incorrecta, o estás accediendo a Nextcloud desde un proxy de confianza. Si no estás accediendo a Nextcloud desde un proxy de confianza, se trata de un tema de seguridad y le puede permitir a un atacante hacer su dirección IP apócrifa visible para Nextcloud. Puedes encontar más infomración en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como un caché distribuido, pero el módulo equivocado PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached sólo soporta \"memchached\" y no \"memchache\". Por favor ve el <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki de ambos módulos</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Algunos archivos no pasaron la verificación de integridad. Para más información de cómo resolver este tema consulta nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listado de archivos inválidos …</a> / <a href=\"{rescanEndpoint}\">Volver a escanear…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "El PHP OPcache no está configurado correctamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para un mejor desempeño, recomendamos </a> usar las siguientes configuraciones en php.ini:<code>",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La fución PHP \"set_time_limit\" no está disponible. Esto podría generar scripts que se interrumpan a media ejecución, rompiendo la instalación. Te recomendamos ámpliamente habilitar esta función.",
+ "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus archivos y directorio de datos sean accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente configurar tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "El encabezado HTTP \"{header}\" no está configurado como \"{expected}\". Este es un riesgo potencial de seguridad o privacidad y te recomendamos cambiar esta configuración.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
+ "Shared" : "Compartido",
+ "Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
+ "The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
+ "Set expiration date" : "Selecciona la vigencia de tu archivo",
+ "Expiration" : "Expiración",
+ "Expiration date" : "Fecha de expiración",
+ "Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
+ "Choose a password for the public link or press the \"Enter\" key" : "Elige una contraseña para la liga pública o presiona la tecla \"Intro\"",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No está soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Resharing is not allowed" : "No se permite volver a compartir",
+ "Share to {name}" : "Compartir con {name}",
+ "Share link" : "Compartir liga",
+ "Link" : "Liga",
+ "Password protect" : "Proteger con contraseña",
+ "Allow editing" : "Permitir editar",
+ "Email link to person" : "Enviar la liga por correo electrónico a una persona",
+ "Send" : "Enviar",
+ "Allow upload and editing" : "Permitir carga y edición",
+ "Read only" : "Sólo lectura",
+ "File drop (upload only)" : "Permitir carga",
+ "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}",
+ "Shared with you by {owner}" : "Compartido contigo por {owner}",
+ "Choose a password for the mail share" : "Elige una contraseña para el elemento compartido por correo",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compartido mediante una liga",
+ "group" : "grupo",
+ "remote" : "remoto",
+ "email" : "correo electrónico",
+ "shared by {sharer}" : "compartido por {sharer}",
+ "Unshare" : "Dejar de compartir",
+ "Can reshare" : "Puede volver a compartir",
+ "Can edit" : "Puede editar",
+ "Can create" : "Puede crear",
+ "Can change" : "Puede cambiar",
+ "Can delete" : "Puede borrar",
+ "Access control" : "Control de acceso",
+ "Could not unshare" : "No fue posible dejar de compartir",
+ "Error while sharing" : "Se presentó un error al compartir",
+ "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar truncada - por favor refina tus términos de búsqueda para poder ver más resultados. ",
+ "No users or groups found for {search}" : "No se encontraron usuarios o gurpos para {search}",
+ "No users found for {search}" : "No se encontraron usuarios para {search}",
+ "An error occurred. Please try again" : "Se presentó un error. Por favor vuelve a intentarlo",
+ "{sharee} (group)" : "{sharee} (grupo)",
+ "{sharee} (remote)" : "{sharee} (remoto)",
+ "{sharee} (email)" : "{sharee} (correo electrónico)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "Share" : "Compartir",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Comparte con otras personas ingresando una dirección de correo electrónico.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Comparte con otras personas ingresando un usuario o un grupo.",
+ "Share with other people by entering a user or group or an email address." : "Comparte con otras personas ingresando un usuario, un grupo o una dirección de correo electrónico.",
+ "Name or email address..." : "Nombre o dirección de correo electrónico",
+ "Name or federated cloud ID..." : "Nombre...",
+ "Name, federated cloud ID or email address..." : "Nombre o dirección de correo electrónico...",
+ "Name..." : "Nombre...",
+ "Error" : "Error",
+ "Error removing share" : "Se presentó un error al dejar de compartir",
+ "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente",
+ "restricted" : "restringido",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Borrar",
+ "Rename" : "Renombrar",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "No tags found" : "No se encontraron etiquetas",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
+ "sunny" : "soleado",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el clima es {weather}",
+ "Hello {name}" : "Hola {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Estos son los resultados de tu búsqueda <script>alert(1)</script></strong>",
+ "new" : "nuevo",
+ "_download %n file_::_download %n files_" : ["Descargar %n archivos","Descargar %n archivos"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, abandonar esta página puede interrumpir el proceso en algunos ambientes. ",
+ "Update to {version}" : "Actualizar a {version}",
+ "An error occurred." : "Se presentó un error.",
+ "Please reload the page." : "Por favor vuelve a cargar la página.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización no fue exitosa. Para más información <a href=\"{url}\">consulta nuestro comentario en el foro </a> que cubre este tema. ",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización no fue exitosa. Por favor reporta este tema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Comunidad Nextcloud</a>.",
+ "Continue to Nextcloud" : "Continuar a Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundo. ","La actualización fue exitosa. Te redireccionaremos a Nextcloud en %n segundos."],
+ "Searching other places" : "Buscando en otras ubicaciones",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados para la búsqueda {tag}{filter}{endtag} en otras carpetas",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de la búsqueda en otra carpeta","{count} resultados de la búsqueda en otras carpetas"],
+ "Personal" : "Personal",
+ "Users" : "Usuarios",
+ "Apps" : "Aplicaciones",
+ "Admin" : "Administración",
+ "Help" : "Ayuda",
+ "Access forbidden" : "Acceso prohibido",
+ "File not found" : "Archivo no encontrado",
+ "The specified document has not been found on the server." : "El documento especificado no ha sido encontrado en el servidor. ",
+ "You can click here to return to %s." : "Puedes hacer click aquí para regresar a %s.",
+ "Internal Server Error" : "Error interno del servidor",
+ "The server was unable to complete your request." : "El servidor no pudo completar tu solicitud.",
+ "If this happens again, please send the technical details below to the server administrator." : "Si esto vuelve a suceder, por favor envia los detalles tecnicos siguientes al adminsitrador del sistema.",
+ "More details can be found in the server log." : "Puedes consultar más detalles en la bitácora del servidor. ",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección Remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "Type: %s" : "Tipo: %s",
+ "Code: %s" : "Código: %s",
+ "Message: %s" : "Mensaje: %s",
+ "File: %s" : "Archivo: %s",
+ "Line: %s" : "Línea: %s",
+ "Trace" : "Rastrear",
+ "Security warning" : "Advertencia de seguridad",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y sus archivos probablemente sean accesibles desde Internet ya que el archivo .htaccess no funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para más información de cómo configurar propiamente tu servidor, por favor ve la <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentación</a>.",
+ "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Usuario",
+ "Storage & database" : "Almacenamiento & base de datos",
+ "Data folder" : "Carpeta de datos",
+ "Configure the database" : "Configurar la base de datos",
+ "Only %s is available." : "Sólo %s está disponible.",
+ "Install and activate additional PHP modules to choose other database types." : "Instala y activa módulos adicionales de PHP para seleccionar otros tipos de bases de datos. ",
+ "For more details check out the documentation." : "Por favor consulta la documentación para más detalles. ",
+ "Database user" : "Usuario de la base de datos",
+ "Database password" : "Contraseña de la base de datos",
+ "Database name" : "Nombre de la base de datos",
+ "Database tablespace" : "Espacio de tablas en la base de datos",
+ "Database host" : "Servidor de base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifica el número de puerto así como el nombre del servidor (ejem., localhost:5432).",
+ "Performance warning" : "Advertencia de desempeño",
+ "SQLite will be used as database." : "SQLite será usado como la base de datos.",
+ "For larger installations we recommend to choose a different database backend." : "Para instalaciones más grandes te recomendamos elegir un backend de base de datos diferente.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLiite es especialmente desalentado al usar el cliente de escritorio para sincrionizar. ",
+ "Finish setup" : "Terminar configuración",
+ "Finishing …" : "Terminando …",
+ "Need help?" : "¿Necesitas ayuda?",
+ "See the documentation" : "Ver la documentación",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere de JavaScript para su correcta operación. Por favor {linkstart}habilita JavaScript{linkend} y vuelve a cargar la página. ",
+ "More apps" : "Más aplicaciones",
+ "Search" : "Buscar",
+ "Reset search" : "Reestablecer búsqueda",
+ "Confirm your password" : "Confirma tu contraseña",
+ "Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
+ "Please contact your administrator." : "Por favor contacta al administrador.",
+ "An internal error occurred." : "Se presentó un error interno.",
+ "Please try again or contact your administrator." : "Por favor vuelve a intentarlo o contacta a tu adminsitrador. ",
+ "Username or email" : "Usuario o correo electrónico",
+ "Wrong password. Reset it?" : "Contraseña equivocada. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña inválida. ",
+ "Log in" : "Ingresar",
+ "Stay logged in" : "Mantener la sesión abierta",
+ "Alternative Logins" : "Accesos Alternativos",
+ "Account access" : "Acceo de cuenta",
+ "You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
+ "App token" : "Ficha de la aplicación",
+ "Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
+ "Redirecting …" : "Redireccionando ... ",
+ "New password" : "Nueva contraseña",
+ "New Password" : "Nueva Contraseña",
+ "Reset password" : "Restablecer contraseña",
+ "Two-factor authentication" : "Autenticación de dos-factores",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada está habilitada para tu cuenta. Favor de autenticarte usando un segundo factor. ",
+ "Cancel log in" : "Cancelar inicio de sesión",
+ "Use backup code" : "Usar código de respaldo",
+ "Error while validating your second factor" : "Se presentó un error al validar tu segundo factor",
+ "Access through untrusted domain" : "Accesa a través de un dominio no de confianza",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Por favor contacta a tu adminsitrador. Si tu eres un administrador, edita la propiedad \"trusted_domains\" en el archivo config/config.php como en el ejemplo config.sample.php.",
+ "Depending on your configuration, this button could also work to trust the domain:" : "Dependiendo de tu configuración, este botón podría funcionar también para confiar en el dominio:",
+ "Add \"%s\" as trusted domain" : "Agregar \"%s\" como un dominio de confianza",
+ "App update required" : "Se requiere una actualización de la aplicación",
+ "%s will be updated to version %s" : "%s será actualizado a la versión %s",
+ "These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
+ "These incompatible apps will be disabled:" : "Las siguientes aplicaciones incompatibles serán deshabilitadas:",
+ "The theme %s has been disabled." : "El tema %s ha sido deshabilitado. ",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Por favor asegurarte de que la base de datos, la carpeta de configuración y las carpetas de datos hayan sido respaldadas antes de continuar. ",
+ "Start update" : "Iniciar actualización",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar la expiración de tiempo en instalaciones grandes, puedes ejecutar el siguiente comando desde tu directorio de instalación:",
+ "Detailed logs" : "Bitácoras detalladas",
+ "Update needed" : "Se requiere de una actualización",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Favor de usar el actualizador desde la línea de comandos ya que tu instancia cuenta con más de 50 usuarios.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para más ayuda, consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">doccumentación</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Estoy conciente de que si continúo haciendo la actualización vía web, la interfaz de usuario corre el riesgo de que el tiempo de la solicitud expire y cause pérdida de datos, pero cuento con un respaldo y sé como restaurar mi instancia en caso de una falla. ",
+ "Upgrade via web on my own risk" : "Actualizar vía Web bajo mi propio riesgo",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Esta instancia %s se encuentra actualmente en modo mantenimiento, que podría tomar algo de tiempo. ",
+ "This page will refresh itself when the %s instance is available again." : "Esta página se actualizará sola cuando la instancia %s esté disponible de nuevo. ",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacta a tu administrador del sistema si este mensaje persiste o se presentó de manera inesperada.",
+ "Thank you for your patience." : "Gracias por tu paciencia.",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "Ok" : "Ok",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
+ "Error while unsharing" : "Se presentó un error al dejar de compartir",
+ "can reshare" : "puede volver a compartir",
+ "can edit" : "puede editar",
+ "can create" : "puede crear",
+ "can change" : "puede modificar",
+ "can delete" : "puede borrar",
+ "access control" : "control de acceso",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Comparte con personas en otros servidores usando sus IDs username@example.com/nextcloud",
+ "Share with users or by mail..." : "Compartir con otros usuarios o por correo electrónico...",
+ "Share with users or remote users..." : "Compartir con otros usuarios o con otros usuarios remotos...",
+ "Share with users, remote users or by mail..." : "Compartir con otros usuarios, otros usuarios remotos o por correo electrónico...",
+ "Share with users or groups..." : "Compartir con otros usuarios o grupos...",
+ "Share with users, groups or by mail..." : "Compartir con otros usuarios, grupos o por correo electrónico...",
+ "Share with users, groups or remote users..." : "Compartir con otros usuarios, otros usuarios remotos o grupos...",
+ "Share with users, groups, remote users or by mail..." : "Compartir con usuarios, grupos, usuarios rempotos o por correo...",
+ "Share with users..." : "Compartir con otros usuarios...",
+ "The object type is not specified." : "El tipo del objeto no está especificado.",
+ "Enter new" : "Ingresar nuevo",
+ "Add" : "Agregar",
+ "Edit tags" : "Editar etiquetas",
+ "Error loading dialog template: {error}" : "Se presentó un error al cargar la plantilla de diálogo: {error}",
+ "No tags selected for deletion." : "No se seleccionaron etiquetas para borrar.",
+ "The update was successful. Redirecting you to Nextcloud now." : "La actualización fue exitosa. Redirigiendote ahora a tu Nextcloud. ",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarte que %s ha compartido %s contigo.\n\nVelo aquí: %s\n\n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "The server encountered an internal error and was unable to complete your request." : "Se presentó un error interno en el servidor y no fue posible completar tu solicitud. ",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor contacta al administrador del servidor si este problema se presenta en múltiples ocasiones, por favor incluye los detalles técnicos siguientes en tu reporte. ",
+ "Log out" : "Salir",
+ "This action requires you to confirm your password:" : "Esta acción requiere que confirmes tu contraseña:",
+ "Use the following link to reset your password: {link}" : "Usa la siguiente liga para restablecer tu contraseña: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarte que %s ha compartido <strong>%s</strong> contigo. <br><a href=\"%s\">¡Velo!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "Esta instalación de Nextcloud se encuentra en modo de usuario único.",
+ "This means only administrators can use the instance." : "Esto significa que sólo los administradores pueden usar la instancia.",
+ "You are accessing the server from an untrusted domain." : "Estás accediendo al servidor desde un dominio no de confianza. ",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor contacta a tu administrador. Si eres el administrador de esta instancia, configura la opción \"trusted_domains\" en config/config.php. Un ejemplo de configuración se proporciona en config/config.sample.php. ",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependiendo de tu configuración, como adminsitrador podrías llegar a usar el botón inferior para confiar en este dominio. ",
+ "Please use the command line updater because you have a big instance." : "Por favor usa el actualizador de línea de comando porque cuentas con una instancia grande. ",
+ "You are about to grant \"%s\" access to your %s account." : "Estás apunto de concederle a \"%s\" acceso a yu cuenta %s."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es_CR.json b/core/l10n/es_CR.json
new file mode 100644
index 00000000000..02d82b31876
--- /dev/null
+++ b/core/l10n/es_CR.json
@@ -0,0 +1,355 @@
+{ "translations": {
+ "Please select a file." : "Por favor selecciona un archivo.",
+ "File is too big" : "El archivo es demasiado grande.",
+ "The selected file is not an image." : "El archivo seleccionado no es una imagen.",
+ "The selected file cannot be read." : "El archivo seleccionado no se puede leer.",
+ "Invalid file provided" : "Archivo proporcionado inválido",
+ "No image or file provided" : "No se especificó un archivo o imagen",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "An error occurred. Please contact your admin." : "Se presentó un error. Por favor contacta a tu adminsitrador. ",
+ "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, por favor inténtalo de nuevo",
+ "No crop data provided" : "No se han proporcionado datos del recorte",
+ "No valid crop data provided" : "No se han proporcionado datos válidos del recorte",
+ "Crop is not square" : "El recorte no es cuadrado",
+ "State token does not match" : "La ficha de estado no corresponde",
+ "Password reset is disabled" : "Restablecer contraseña se encuentra deshabilitado",
+ "Couldn't reset password because the token is invalid" : "No ha sido posible restablecer la contraseña porque la ficha es inválida",
+ "Couldn't reset password because the token is expired" : "No ha sido posible restablecer la contraseña porque la ficha ha expirado",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Por favor contacta a tu adminsitrador. ",
+ "%s password reset" : "%s restablecer la contraseña",
+ "Password reset" : "Restablecer contraseña",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en el siguiente botón para restablecer tu contraseña. Si no has solicitado restablecer su contraseña, por favor ignora este correo. ",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en la siguiente liga para restablecer su contraseña. Si no has solicitado restablecer la contraseña, por favor ignora este mensaje. ",
+ "Reset your password" : "Restablecer tu contraseña",
+ "Couldn't send reset email. Please contact your administrator." : "No fue posible enviar el correo de restauración. Por favor contacta a tu adminsitrador. ",
+ "Couldn't send reset email. Please make sure your username is correct." : "No fue posible restablecer el correo electrónico. Por favor asegurarte de que tu nombre de usuario sea correcto. ",
+ "Preparing update" : "Preparando actualización",
+ "[%d / %d]: %s" : "[%d / %d]: %s ",
+ "Repair warning: " : "Advertencia de reparación:",
+ "Repair error: " : "Error de reparación: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor usa el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabla %s",
+ "Turned on maintenance mode" : "Modo mantenimiento activado",
+ "Turned off maintenance mode" : "Modo mantenimiento desactivado",
+ "Maintenance mode is kept active" : "El modo mantenimiento sigue activo",
+ "Updating database schema" : "Actualizando esquema de base de datos",
+ "Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando si el archivo del esquema de base de datos puede ser actualizado (esto puedo tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update" : "Actualización del esquema de base de datos verificada",
+ "Checking updates of apps" : "Verificando actualizaciones para aplicaciones",
+ "Checking for update of app \"%s\" in appstore" : "Verificando actualizaciones para la aplicacion \"%s\" en la appstore",
+ "Update app \"%s\" from appstore" : "Actualizar la aplicación \"%s\" desde la appstore",
+ "Checked for update of app \"%s\" in appstore" : "Se verificaron actualizaciones para la aplicación \"%s\" en la appstore",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update for apps" : "Se verificó la actualización del esquema de la base de datos para las aplicaciones",
+ "Updated \"%s\" to %s" : "Actualizando \"%s\" a %s",
+ "Set log level to debug" : "Establecer nivel de bitacora a depurar",
+ "Reset log level" : "Restablecer nivel de bitácora",
+ "Starting code integrity check" : "Comenzando verificación de integridad del código",
+ "Finished code integrity check" : "Terminó la verificación de integridad del código ",
+ "%s (3rdparty)" : "%s (de 3ros)",
+ "%s (incompatible)" : "%s (incompatible)",
+ "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s",
+ "Already up to date" : "Ya está actualizado",
+ "Search contacts …" : "Buscar contactos ...",
+ "No contacts found" : "No se encontraron contactos",
+ "Show all contacts …" : "Mostrar todos los contactos ...",
+ "There was an error loading your contacts" : "Se presentó un error al cargar tus contactos",
+ "Loading your contacts …" : "Cargando sus contactos ... ",
+ "Looking for {term} …" : "Buscando {term} ...",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Más información ...</a>",
+ "No action available" : "No hay acciones disponibles",
+ "Error fetching contact actions" : "Se presentó un error al traer las acciónes de contatos",
+ "Settings" : "Configuraciones ",
+ "Connection to server lost" : "Se ha perdido la conexión con el servidor",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"],
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Descartar",
+ "This action requires you to confirm your password" : "Esta acción requiere que confirmes tu contraseña",
+ "Authentication required" : "Se requiere autenticación",
+ "Password" : "Contraseña",
+ "Cancel" : "Cancelar",
+ "Confirm" : "Confirmar",
+ "Failed to authenticate, try again" : "Falla en la autenticación, por favor reintentalo",
+ "seconds ago" : "hace segundos",
+ "Logging in …" : "Iniciando sesión ...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "La liga para restablecer tu contraseña ha sido enviada a tu correo electrónico. Si no lo recibes dentro de un tiempo razonable, verifica las carpetas de spam/basura.<br>Si no la encuentras consulta a tu adminstrador local.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. No habrá manera de recuperar tus datos una vez que restablezca tu contraseña. <br />Si no estás seguro de qué hacer, por favor contacta a tu administrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "I know what I'm doing" : "Sé lo que estoy haciendo",
+ "Password can not be changed. Please contact your administrator." : "Las contraseñas no se pueden cambiar. Por favor contacta a tu adminstrador",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hay archivos aquí",
+ "Choose" : "Seleccionar",
+ "Copy" : "Copiar",
+ "Move" : "Mover",
+ "Error loading file picker template: {error}" : "Se presentó un error al cargar la plantilla del seleccionador de archivos: {error}",
+ "OK" : "OK",
+ "Error loading message template: {error}" : "Se presentó un error al cargar la plantilla del mensaje: {error}",
+ "read-only" : "sólo-lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos en el archivo"],
+ "One file conflict" : "Un conflicto en el archivo",
+ "New Files" : "Archivos Nuevos",
+ "Already existing files" : "Archivos ya existentes",
+ "Which files do you want to keep?" : "¿Cuales archivos deseas mantener?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si seleccionas ambas versiones, se le agregará un número al nombre del archivo copiado.",
+ "Continue" : "Continuar",
+ "(all selected)" : "(todos seleccionados)",
+ "({count} selected)" : "({count} seleccionados)",
+ "Error loading file exists template" : "Se presentó un error al cargar la plantilla de existe archivo ",
+ "Pending" : "Pendiente",
+ "Copy to {folder}" : "Copiar a {folder}",
+ "Move to {folder}" : "Mover a {folder}",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Tu servidor web aún no se encuentra correctamente configurado para permitir la sincronización de archivos porque la interface de WebDAV parece estar rota. ",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Tu servidor web no está correctamente configurado para resolver \"{url}\". Puedes encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "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. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no cuenta con una conexión a Internet: No fue posible alcanzar diversos puntos de acceso <EndPoints>. Esto significa que algunas funcionalidades como el montaje de almacenamiento externo, notificaciónes de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Acceder archivos de forma remota y el envío de correos electrónicos de notificación puede que tampoco funcionen. Te sugerimos habilitar la conexión a Internet para este servidor si deseas contar con todas las características.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No ha sido configurada la memoria caché. Por favor configura un memechache si está disponible para mejorar el desempeño. Puedes encontrar información adicional en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No fue posible leer /dev/urandom por PHP que es altamente desalentado por razones de seguridad. Puedes obtener más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Estás usando PHP {version}. Te recomendamos actualizar tu versión de PHP para aprovechar <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">las actualizaciones de seguridad y desempeño suministradas por el Grupo PHP</a> tan pronto como tu distribución lo soporte. ",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de los encabezados del proxy inverso es incorrecta, o estás accediendo a Nextcloud desde un proxy de confianza. Si no estás accediendo a Nextcloud desde un proxy de confianza, se trata de un tema de seguridad y le puede permitir a un atacante hacer su dirección IP apócrifa visible para Nextcloud. Puedes encontar más infomración en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como un caché distribuido, pero el módulo equivocado PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached sólo soporta \"memchached\" y no \"memchache\". Por favor ve el <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki de ambos módulos</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Algunos archivos no pasaron la verificación de integridad. Para más información de cómo resolver este tema consulta nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listado de archivos inválidos …</a> / <a href=\"{rescanEndpoint}\">Volver a escanear…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "El PHP OPcache no está configurado correctamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para un mejor desempeño, recomendamos </a> usar las siguientes configuraciones en php.ini:<code>",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La fución PHP \"set_time_limit\" no está disponible. Esto podría generar scripts que se interrumpan a media ejecución, rompiendo la instalación. Te recomendamos ámpliamente habilitar esta función.",
+ "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus archivos y directorio de datos sean accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente configurar tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "El encabezado HTTP \"{header}\" no está configurado como \"{expected}\". Este es un riesgo potencial de seguridad o privacidad y te recomendamos cambiar esta configuración.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
+ "Shared" : "Compartido",
+ "Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
+ "The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
+ "Set expiration date" : "Selecciona la vigencia de tu archivo",
+ "Expiration" : "Expiración",
+ "Expiration date" : "Fecha de expiración",
+ "Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
+ "Choose a password for the public link or press the \"Enter\" key" : "Elige una contraseña para la liga pública o presiona la tecla \"Intro\"",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No está soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Resharing is not allowed" : "No se permite volver a compartir",
+ "Share to {name}" : "Compartir con {name}",
+ "Share link" : "Compartir liga",
+ "Link" : "Liga",
+ "Password protect" : "Proteger con contraseña",
+ "Allow editing" : "Permitir editar",
+ "Email link to person" : "Enviar la liga por correo electrónico a una persona",
+ "Send" : "Enviar",
+ "Allow upload and editing" : "Permitir carga y edición",
+ "Read only" : "Sólo lectura",
+ "File drop (upload only)" : "Permitir carga",
+ "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}",
+ "Shared with you by {owner}" : "Compartido contigo por {owner}",
+ "Choose a password for the mail share" : "Elige una contraseña para el elemento compartido por correo",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compartido mediante una liga",
+ "group" : "grupo",
+ "remote" : "remoto",
+ "email" : "correo electrónico",
+ "shared by {sharer}" : "compartido por {sharer}",
+ "Unshare" : "Dejar de compartir",
+ "Can reshare" : "Puede volver a compartir",
+ "Can edit" : "Puede editar",
+ "Can create" : "Puede crear",
+ "Can change" : "Puede cambiar",
+ "Can delete" : "Puede borrar",
+ "Access control" : "Control de acceso",
+ "Could not unshare" : "No fue posible dejar de compartir",
+ "Error while sharing" : "Se presentó un error al compartir",
+ "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar truncada - por favor refina tus términos de búsqueda para poder ver más resultados. ",
+ "No users or groups found for {search}" : "No se encontraron usuarios o gurpos para {search}",
+ "No users found for {search}" : "No se encontraron usuarios para {search}",
+ "An error occurred. Please try again" : "Se presentó un error. Por favor vuelve a intentarlo",
+ "{sharee} (group)" : "{sharee} (grupo)",
+ "{sharee} (remote)" : "{sharee} (remoto)",
+ "{sharee} (email)" : "{sharee} (correo electrónico)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "Share" : "Compartir",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Comparte con otras personas ingresando una dirección de correo electrónico.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Comparte con otras personas ingresando un usuario o un grupo.",
+ "Share with other people by entering a user or group or an email address." : "Comparte con otras personas ingresando un usuario, un grupo o una dirección de correo electrónico.",
+ "Name or email address..." : "Nombre o dirección de correo electrónico",
+ "Name or federated cloud ID..." : "Nombre...",
+ "Name, federated cloud ID or email address..." : "Nombre o dirección de correo electrónico...",
+ "Name..." : "Nombre...",
+ "Error" : "Error",
+ "Error removing share" : "Se presentó un error al dejar de compartir",
+ "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente",
+ "restricted" : "restringido",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Borrar",
+ "Rename" : "Renombrar",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "No tags found" : "No se encontraron etiquetas",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
+ "sunny" : "soleado",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el clima es {weather}",
+ "Hello {name}" : "Hola {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Estos son los resultados de tu búsqueda <script>alert(1)</script></strong>",
+ "new" : "nuevo",
+ "_download %n file_::_download %n files_" : ["Descargar %n archivos","Descargar %n archivos"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, abandonar esta página puede interrumpir el proceso en algunos ambientes. ",
+ "Update to {version}" : "Actualizar a {version}",
+ "An error occurred." : "Se presentó un error.",
+ "Please reload the page." : "Por favor vuelve a cargar la página.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización no fue exitosa. Para más información <a href=\"{url}\">consulta nuestro comentario en el foro </a> que cubre este tema. ",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización no fue exitosa. Por favor reporta este tema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Comunidad Nextcloud</a>.",
+ "Continue to Nextcloud" : "Continuar a Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundo. ","La actualización fue exitosa. Te redireccionaremos a Nextcloud en %n segundos."],
+ "Searching other places" : "Buscando en otras ubicaciones",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados para la búsqueda {tag}{filter}{endtag} en otras carpetas",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de la búsqueda en otra carpeta","{count} resultados de la búsqueda en otras carpetas"],
+ "Personal" : "Personal",
+ "Users" : "Usuarios",
+ "Apps" : "Aplicaciones",
+ "Admin" : "Administración",
+ "Help" : "Ayuda",
+ "Access forbidden" : "Acceso prohibido",
+ "File not found" : "Archivo no encontrado",
+ "The specified document has not been found on the server." : "El documento especificado no ha sido encontrado en el servidor. ",
+ "You can click here to return to %s." : "Puedes hacer click aquí para regresar a %s.",
+ "Internal Server Error" : "Error interno del servidor",
+ "The server was unable to complete your request." : "El servidor no pudo completar tu solicitud.",
+ "If this happens again, please send the technical details below to the server administrator." : "Si esto vuelve a suceder, por favor envia los detalles tecnicos siguientes al adminsitrador del sistema.",
+ "More details can be found in the server log." : "Puedes consultar más detalles en la bitácora del servidor. ",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección Remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "Type: %s" : "Tipo: %s",
+ "Code: %s" : "Código: %s",
+ "Message: %s" : "Mensaje: %s",
+ "File: %s" : "Archivo: %s",
+ "Line: %s" : "Línea: %s",
+ "Trace" : "Rastrear",
+ "Security warning" : "Advertencia de seguridad",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y sus archivos probablemente sean accesibles desde Internet ya que el archivo .htaccess no funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para más información de cómo configurar propiamente tu servidor, por favor ve la <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentación</a>.",
+ "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Usuario",
+ "Storage & database" : "Almacenamiento & base de datos",
+ "Data folder" : "Carpeta de datos",
+ "Configure the database" : "Configurar la base de datos",
+ "Only %s is available." : "Sólo %s está disponible.",
+ "Install and activate additional PHP modules to choose other database types." : "Instala y activa módulos adicionales de PHP para seleccionar otros tipos de bases de datos. ",
+ "For more details check out the documentation." : "Por favor consulta la documentación para más detalles. ",
+ "Database user" : "Usuario de la base de datos",
+ "Database password" : "Contraseña de la base de datos",
+ "Database name" : "Nombre de la base de datos",
+ "Database tablespace" : "Espacio de tablas en la base de datos",
+ "Database host" : "Servidor de base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifica el número de puerto así como el nombre del servidor (ejem., localhost:5432).",
+ "Performance warning" : "Advertencia de desempeño",
+ "SQLite will be used as database." : "SQLite será usado como la base de datos.",
+ "For larger installations we recommend to choose a different database backend." : "Para instalaciones más grandes te recomendamos elegir un backend de base de datos diferente.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLiite es especialmente desalentado al usar el cliente de escritorio para sincrionizar. ",
+ "Finish setup" : "Terminar configuración",
+ "Finishing …" : "Terminando …",
+ "Need help?" : "¿Necesitas ayuda?",
+ "See the documentation" : "Ver la documentación",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere de JavaScript para su correcta operación. Por favor {linkstart}habilita JavaScript{linkend} y vuelve a cargar la página. ",
+ "More apps" : "Más aplicaciones",
+ "Search" : "Buscar",
+ "Reset search" : "Reestablecer búsqueda",
+ "Confirm your password" : "Confirma tu contraseña",
+ "Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
+ "Please contact your administrator." : "Por favor contacta al administrador.",
+ "An internal error occurred." : "Se presentó un error interno.",
+ "Please try again or contact your administrator." : "Por favor vuelve a intentarlo o contacta a tu adminsitrador. ",
+ "Username or email" : "Usuario o correo electrónico",
+ "Wrong password. Reset it?" : "Contraseña equivocada. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña inválida. ",
+ "Log in" : "Ingresar",
+ "Stay logged in" : "Mantener la sesión abierta",
+ "Alternative Logins" : "Accesos Alternativos",
+ "Account access" : "Acceo de cuenta",
+ "You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
+ "App token" : "Ficha de la aplicación",
+ "Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
+ "Redirecting …" : "Redireccionando ... ",
+ "New password" : "Nueva contraseña",
+ "New Password" : "Nueva Contraseña",
+ "Reset password" : "Restablecer contraseña",
+ "Two-factor authentication" : "Autenticación de dos-factores",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada está habilitada para tu cuenta. Favor de autenticarte usando un segundo factor. ",
+ "Cancel log in" : "Cancelar inicio de sesión",
+ "Use backup code" : "Usar código de respaldo",
+ "Error while validating your second factor" : "Se presentó un error al validar tu segundo factor",
+ "Access through untrusted domain" : "Accesa a través de un dominio no de confianza",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Por favor contacta a tu adminsitrador. Si tu eres un administrador, edita la propiedad \"trusted_domains\" en el archivo config/config.php como en el ejemplo config.sample.php.",
+ "Depending on your configuration, this button could also work to trust the domain:" : "Dependiendo de tu configuración, este botón podría funcionar también para confiar en el dominio:",
+ "Add \"%s\" as trusted domain" : "Agregar \"%s\" como un dominio de confianza",
+ "App update required" : "Se requiere una actualización de la aplicación",
+ "%s will be updated to version %s" : "%s será actualizado a la versión %s",
+ "These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
+ "These incompatible apps will be disabled:" : "Las siguientes aplicaciones incompatibles serán deshabilitadas:",
+ "The theme %s has been disabled." : "El tema %s ha sido deshabilitado. ",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Por favor asegurarte de que la base de datos, la carpeta de configuración y las carpetas de datos hayan sido respaldadas antes de continuar. ",
+ "Start update" : "Iniciar actualización",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar la expiración de tiempo en instalaciones grandes, puedes ejecutar el siguiente comando desde tu directorio de instalación:",
+ "Detailed logs" : "Bitácoras detalladas",
+ "Update needed" : "Se requiere de una actualización",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Favor de usar el actualizador desde la línea de comandos ya que tu instancia cuenta con más de 50 usuarios.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para más ayuda, consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">doccumentación</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Estoy conciente de que si continúo haciendo la actualización vía web, la interfaz de usuario corre el riesgo de que el tiempo de la solicitud expire y cause pérdida de datos, pero cuento con un respaldo y sé como restaurar mi instancia en caso de una falla. ",
+ "Upgrade via web on my own risk" : "Actualizar vía Web bajo mi propio riesgo",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Esta instancia %s se encuentra actualmente en modo mantenimiento, que podría tomar algo de tiempo. ",
+ "This page will refresh itself when the %s instance is available again." : "Esta página se actualizará sola cuando la instancia %s esté disponible de nuevo. ",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacta a tu administrador del sistema si este mensaje persiste o se presentó de manera inesperada.",
+ "Thank you for your patience." : "Gracias por tu paciencia.",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "Ok" : "Ok",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
+ "Error while unsharing" : "Se presentó un error al dejar de compartir",
+ "can reshare" : "puede volver a compartir",
+ "can edit" : "puede editar",
+ "can create" : "puede crear",
+ "can change" : "puede modificar",
+ "can delete" : "puede borrar",
+ "access control" : "control de acceso",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Comparte con personas en otros servidores usando sus IDs username@example.com/nextcloud",
+ "Share with users or by mail..." : "Compartir con otros usuarios o por correo electrónico...",
+ "Share with users or remote users..." : "Compartir con otros usuarios o con otros usuarios remotos...",
+ "Share with users, remote users or by mail..." : "Compartir con otros usuarios, otros usuarios remotos o por correo electrónico...",
+ "Share with users or groups..." : "Compartir con otros usuarios o grupos...",
+ "Share with users, groups or by mail..." : "Compartir con otros usuarios, grupos o por correo electrónico...",
+ "Share with users, groups or remote users..." : "Compartir con otros usuarios, otros usuarios remotos o grupos...",
+ "Share with users, groups, remote users or by mail..." : "Compartir con usuarios, grupos, usuarios rempotos o por correo...",
+ "Share with users..." : "Compartir con otros usuarios...",
+ "The object type is not specified." : "El tipo del objeto no está especificado.",
+ "Enter new" : "Ingresar nuevo",
+ "Add" : "Agregar",
+ "Edit tags" : "Editar etiquetas",
+ "Error loading dialog template: {error}" : "Se presentó un error al cargar la plantilla de diálogo: {error}",
+ "No tags selected for deletion." : "No se seleccionaron etiquetas para borrar.",
+ "The update was successful. Redirecting you to Nextcloud now." : "La actualización fue exitosa. Redirigiendote ahora a tu Nextcloud. ",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarte que %s ha compartido %s contigo.\n\nVelo aquí: %s\n\n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "The server encountered an internal error and was unable to complete your request." : "Se presentó un error interno en el servidor y no fue posible completar tu solicitud. ",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor contacta al administrador del servidor si este problema se presenta en múltiples ocasiones, por favor incluye los detalles técnicos siguientes en tu reporte. ",
+ "Log out" : "Salir",
+ "This action requires you to confirm your password:" : "Esta acción requiere que confirmes tu contraseña:",
+ "Use the following link to reset your password: {link}" : "Usa la siguiente liga para restablecer tu contraseña: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarte que %s ha compartido <strong>%s</strong> contigo. <br><a href=\"%s\">¡Velo!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "Esta instalación de Nextcloud se encuentra en modo de usuario único.",
+ "This means only administrators can use the instance." : "Esto significa que sólo los administradores pueden usar la instancia.",
+ "You are accessing the server from an untrusted domain." : "Estás accediendo al servidor desde un dominio no de confianza. ",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor contacta a tu administrador. Si eres el administrador de esta instancia, configura la opción \"trusted_domains\" en config/config.php. Un ejemplo de configuración se proporciona en config/config.sample.php. ",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependiendo de tu configuración, como adminsitrador podrías llegar a usar el botón inferior para confiar en este dominio. ",
+ "Please use the command line updater because you have a big instance." : "Por favor usa el actualizador de línea de comando porque cuentas con una instancia grande. ",
+ "You are about to grant \"%s\" access to your %s account." : "Estás apunto de concederle a \"%s\" acceso a yu cuenta %s."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/es_DO.js b/core/l10n/es_DO.js
new file mode 100644
index 00000000000..2572a49ed86
--- /dev/null
+++ b/core/l10n/es_DO.js
@@ -0,0 +1,357 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Por favor selecciona un archivo.",
+ "File is too big" : "El archivo es demasiado grande.",
+ "The selected file is not an image." : "El archivo seleccionado no es una imagen.",
+ "The selected file cannot be read." : "El archivo seleccionado no se puede leer.",
+ "Invalid file provided" : "Archivo proporcionado inválido",
+ "No image or file provided" : "No se especificó un archivo o imagen",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "An error occurred. Please contact your admin." : "Se presentó un error. Por favor contacta a tu adminsitrador. ",
+ "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, por favor inténtalo de nuevo",
+ "No crop data provided" : "No se han proporcionado datos del recorte",
+ "No valid crop data provided" : "No se han proporcionado datos válidos del recorte",
+ "Crop is not square" : "El recorte no es cuadrado",
+ "State token does not match" : "La ficha de estado no corresponde",
+ "Password reset is disabled" : "Restablecer contraseña se encuentra deshabilitado",
+ "Couldn't reset password because the token is invalid" : "No ha sido posible restablecer la contraseña porque la ficha es inválida",
+ "Couldn't reset password because the token is expired" : "No ha sido posible restablecer la contraseña porque la ficha ha expirado",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Por favor contacta a tu adminsitrador. ",
+ "%s password reset" : "%s restablecer la contraseña",
+ "Password reset" : "Restablecer contraseña",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en el siguiente botón para restablecer tu contraseña. Si no has solicitado restablecer su contraseña, por favor ignora este correo. ",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en la siguiente liga para restablecer su contraseña. Si no has solicitado restablecer la contraseña, por favor ignora este mensaje. ",
+ "Reset your password" : "Restablecer tu contraseña",
+ "Couldn't send reset email. Please contact your administrator." : "No fue posible enviar el correo de restauración. Por favor contacta a tu adminsitrador. ",
+ "Couldn't send reset email. Please make sure your username is correct." : "No fue posible restablecer el correo electrónico. Por favor asegurarte de que tu nombre de usuario sea correcto. ",
+ "Preparing update" : "Preparando actualización",
+ "[%d / %d]: %s" : "[%d / %d]: %s ",
+ "Repair warning: " : "Advertencia de reparación:",
+ "Repair error: " : "Error de reparación: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor usa el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabla %s",
+ "Turned on maintenance mode" : "Modo mantenimiento activado",
+ "Turned off maintenance mode" : "Modo mantenimiento desactivado",
+ "Maintenance mode is kept active" : "El modo mantenimiento sigue activo",
+ "Updating database schema" : "Actualizando esquema de base de datos",
+ "Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando si el archivo del esquema de base de datos puede ser actualizado (esto puedo tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update" : "Actualización del esquema de base de datos verificada",
+ "Checking updates of apps" : "Verificando actualizaciones para aplicaciones",
+ "Checking for update of app \"%s\" in appstore" : "Verificando actualizaciones para la aplicacion \"%s\" en la appstore",
+ "Update app \"%s\" from appstore" : "Actualizar la aplicación \"%s\" desde la appstore",
+ "Checked for update of app \"%s\" in appstore" : "Se verificaron actualizaciones para la aplicación \"%s\" en la appstore",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update for apps" : "Se verificó la actualización del esquema de la base de datos para las aplicaciones",
+ "Updated \"%s\" to %s" : "Actualizando \"%s\" a %s",
+ "Set log level to debug" : "Establecer nivel de bitacora a depurar",
+ "Reset log level" : "Restablecer nivel de bitácora",
+ "Starting code integrity check" : "Comenzando verificación de integridad del código",
+ "Finished code integrity check" : "Terminó la verificación de integridad del código ",
+ "%s (3rdparty)" : "%s (de 3ros)",
+ "%s (incompatible)" : "%s (incompatible)",
+ "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s",
+ "Already up to date" : "Ya está actualizado",
+ "Search contacts …" : "Buscar contactos ...",
+ "No contacts found" : "No se encontraron contactos",
+ "Show all contacts …" : "Mostrar todos los contactos ...",
+ "There was an error loading your contacts" : "Se presentó un error al cargar tus contactos",
+ "Loading your contacts …" : "Cargando sus contactos ... ",
+ "Looking for {term} …" : "Buscando {term} ...",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Más información ...</a>",
+ "No action available" : "No hay acciones disponibles",
+ "Error fetching contact actions" : "Se presentó un error al traer las acciónes de contatos",
+ "Settings" : "Configuraciones ",
+ "Connection to server lost" : "Se ha perdido la conexión con el servidor",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"],
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Descartar",
+ "This action requires you to confirm your password" : "Esta acción requiere que confirmes tu contraseña",
+ "Authentication required" : "Se requiere autenticación",
+ "Password" : "Contraseña",
+ "Cancel" : "Cancelar",
+ "Confirm" : "Confirmar",
+ "Failed to authenticate, try again" : "Falla en la autenticación, por favor reintentalo",
+ "seconds ago" : "hace segundos",
+ "Logging in …" : "Iniciando sesión ...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "La liga para restablecer tu contraseña ha sido enviada a tu correo electrónico. Si no lo recibes dentro de un tiempo razonable, verifica las carpetas de spam/basura.<br>Si no la encuentras consulta a tu adminstrador local.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. No habrá manera de recuperar tus datos una vez que restablezca tu contraseña. <br />Si no estás seguro de qué hacer, por favor contacta a tu administrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "I know what I'm doing" : "Sé lo que estoy haciendo",
+ "Password can not be changed. Please contact your administrator." : "Las contraseñas no se pueden cambiar. Por favor contacta a tu adminstrador",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hay archivos aquí",
+ "Choose" : "Seleccionar",
+ "Copy" : "Copiar",
+ "Move" : "Mover",
+ "Error loading file picker template: {error}" : "Se presentó un error al cargar la plantilla del seleccionador de archivos: {error}",
+ "OK" : "OK",
+ "Error loading message template: {error}" : "Se presentó un error al cargar la plantilla del mensaje: {error}",
+ "read-only" : "sólo-lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos en el archivo"],
+ "One file conflict" : "Un conflicto en el archivo",
+ "New Files" : "Archivos Nuevos",
+ "Already existing files" : "Archivos ya existentes",
+ "Which files do you want to keep?" : "¿Cuales archivos deseas mantener?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si seleccionas ambas versiones, se le agregará un número al nombre del archivo copiado.",
+ "Continue" : "Continuar",
+ "(all selected)" : "(todos seleccionados)",
+ "({count} selected)" : "({count} seleccionados)",
+ "Error loading file exists template" : "Se presentó un error al cargar la plantilla de existe archivo ",
+ "Pending" : "Pendiente",
+ "Copy to {folder}" : "Copiar a {folder}",
+ "Move to {folder}" : "Mover a {folder}",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Tu servidor web aún no se encuentra correctamente configurado para permitir la sincronización de archivos porque la interface de WebDAV parece estar rota. ",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Tu servidor web no está correctamente configurado para resolver \"{url}\". Puedes encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "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. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no cuenta con una conexión a Internet: No fue posible alcanzar diversos puntos de acceso <EndPoints>. Esto significa que algunas funcionalidades como el montaje de almacenamiento externo, notificaciónes de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Acceder archivos de forma remota y el envío de correos electrónicos de notificación puede que tampoco funcionen. Te sugerimos habilitar la conexión a Internet para este servidor si deseas contar con todas las características.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No ha sido configurada la memoria caché. Por favor configura un memechache si está disponible para mejorar el desempeño. Puedes encontrar información adicional en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No fue posible leer /dev/urandom por PHP que es altamente desalentado por razones de seguridad. Puedes obtener más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Estás usando PHP {version}. Te recomendamos actualizar tu versión de PHP para aprovechar <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">las actualizaciones de seguridad y desempeño suministradas por el Grupo PHP</a> tan pronto como tu distribución lo soporte. ",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de los encabezados del proxy inverso es incorrecta, o estás accediendo a Nextcloud desde un proxy de confianza. Si no estás accediendo a Nextcloud desde un proxy de confianza, se trata de un tema de seguridad y le puede permitir a un atacante hacer su dirección IP apócrifa visible para Nextcloud. Puedes encontar más infomración en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como un caché distribuido, pero el módulo equivocado PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached sólo soporta \"memchached\" y no \"memchache\". Por favor ve el <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki de ambos módulos</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Algunos archivos no pasaron la verificación de integridad. Para más información de cómo resolver este tema consulta nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listado de archivos inválidos …</a> / <a href=\"{rescanEndpoint}\">Volver a escanear…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "El PHP OPcache no está configurado correctamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para un mejor desempeño, recomendamos </a> usar las siguientes configuraciones en php.ini:<code>",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La fución PHP \"set_time_limit\" no está disponible. Esto podría generar scripts que se interrumpan a media ejecución, rompiendo la instalación. Te recomendamos ámpliamente habilitar esta función.",
+ "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus archivos y directorio de datos sean accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente configurar tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "El encabezado HTTP \"{header}\" no está configurado como \"{expected}\". Este es un riesgo potencial de seguridad o privacidad y te recomendamos cambiar esta configuración.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
+ "Shared" : "Compartido",
+ "Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
+ "The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
+ "Set expiration date" : "Selecciona la vigencia de tu archivo",
+ "Expiration" : "Expiración",
+ "Expiration date" : "Fecha de expiración",
+ "Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
+ "Choose a password for the public link or press the \"Enter\" key" : "Elige una contraseña para la liga pública o presiona la tecla \"Intro\"",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No está soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Resharing is not allowed" : "No se permite volver a compartir",
+ "Share to {name}" : "Compartir con {name}",
+ "Share link" : "Compartir liga",
+ "Link" : "Liga",
+ "Password protect" : "Proteger con contraseña",
+ "Allow editing" : "Permitir editar",
+ "Email link to person" : "Enviar la liga por correo electrónico a una persona",
+ "Send" : "Enviar",
+ "Allow upload and editing" : "Permitir carga y edición",
+ "Read only" : "Sólo lectura",
+ "File drop (upload only)" : "Permitir carga",
+ "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}",
+ "Shared with you by {owner}" : "Compartido contigo por {owner}",
+ "Choose a password for the mail share" : "Elige una contraseña para el elemento compartido por correo",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compartido mediante una liga",
+ "group" : "grupo",
+ "remote" : "remoto",
+ "email" : "correo electrónico",
+ "shared by {sharer}" : "compartido por {sharer}",
+ "Unshare" : "Dejar de compartir",
+ "Can reshare" : "Puede volver a compartir",
+ "Can edit" : "Puede editar",
+ "Can create" : "Puede crear",
+ "Can change" : "Puede cambiar",
+ "Can delete" : "Puede borrar",
+ "Access control" : "Control de acceso",
+ "Could not unshare" : "No fue posible dejar de compartir",
+ "Error while sharing" : "Se presentó un error al compartir",
+ "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar truncada - por favor refina tus términos de búsqueda para poder ver más resultados. ",
+ "No users or groups found for {search}" : "No se encontraron usuarios o gurpos para {search}",
+ "No users found for {search}" : "No se encontraron usuarios para {search}",
+ "An error occurred. Please try again" : "Se presentó un error. Por favor vuelve a intentarlo",
+ "{sharee} (group)" : "{sharee} (grupo)",
+ "{sharee} (remote)" : "{sharee} (remoto)",
+ "{sharee} (email)" : "{sharee} (correo electrónico)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "Share" : "Compartir",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Comparte con otras personas ingresando una dirección de correo electrónico.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Comparte con otras personas ingresando un usuario o un grupo.",
+ "Share with other people by entering a user or group or an email address." : "Comparte con otras personas ingresando un usuario, un grupo o una dirección de correo electrónico.",
+ "Name or email address..." : "Nombre o dirección de correo electrónico",
+ "Name or federated cloud ID..." : "Nombre...",
+ "Name, federated cloud ID or email address..." : "Nombre o dirección de correo electrónico...",
+ "Name..." : "Nombre...",
+ "Error" : "Error",
+ "Error removing share" : "Se presentó un error al dejar de compartir",
+ "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente",
+ "restricted" : "restringido",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Borrar",
+ "Rename" : "Renombrar",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "No tags found" : "No se encontraron etiquetas",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
+ "sunny" : "soleado",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el clima es {weather}",
+ "Hello {name}" : "Hola {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Estos son los resultados de tu búsqueda <script>alert(1)</script></strong>",
+ "new" : "nuevo",
+ "_download %n file_::_download %n files_" : ["Descargar %n archivos","Descargar %n archivos"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, abandonar esta página puede interrumpir el proceso en algunos ambientes. ",
+ "Update to {version}" : "Actualizar a {version}",
+ "An error occurred." : "Se presentó un error.",
+ "Please reload the page." : "Por favor vuelve a cargar la página.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización no fue exitosa. Para más información <a href=\"{url}\">consulta nuestro comentario en el foro </a> que cubre este tema. ",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización no fue exitosa. Por favor reporta este tema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Comunidad Nextcloud</a>.",
+ "Continue to Nextcloud" : "Continuar a Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundo. ","La actualización fue exitosa. Te redireccionaremos a Nextcloud en %n segundos."],
+ "Searching other places" : "Buscando en otras ubicaciones",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados para la búsqueda {tag}{filter}{endtag} en otras carpetas",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de la búsqueda en otra carpeta","{count} resultados de la búsqueda en otras carpetas"],
+ "Personal" : "Personal",
+ "Users" : "Usuarios",
+ "Apps" : "Aplicaciones",
+ "Admin" : "Administración",
+ "Help" : "Ayuda",
+ "Access forbidden" : "Acceso prohibido",
+ "File not found" : "Archivo no encontrado",
+ "The specified document has not been found on the server." : "El documento especificado no ha sido encontrado en el servidor. ",
+ "You can click here to return to %s." : "Puedes hacer click aquí para regresar a %s.",
+ "Internal Server Error" : "Error interno del servidor",
+ "The server was unable to complete your request." : "El servidor no pudo completar tu solicitud.",
+ "If this happens again, please send the technical details below to the server administrator." : "Si esto vuelve a suceder, por favor envia los detalles tecnicos siguientes al adminsitrador del sistema.",
+ "More details can be found in the server log." : "Puedes consultar más detalles en la bitácora del servidor. ",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección Remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "Type: %s" : "Tipo: %s",
+ "Code: %s" : "Código: %s",
+ "Message: %s" : "Mensaje: %s",
+ "File: %s" : "Archivo: %s",
+ "Line: %s" : "Línea: %s",
+ "Trace" : "Rastrear",
+ "Security warning" : "Advertencia de seguridad",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y sus archivos probablemente sean accesibles desde Internet ya que el archivo .htaccess no funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para más información de cómo configurar propiamente tu servidor, por favor ve la <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentación</a>.",
+ "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Usuario",
+ "Storage & database" : "Almacenamiento & base de datos",
+ "Data folder" : "Carpeta de datos",
+ "Configure the database" : "Configurar la base de datos",
+ "Only %s is available." : "Sólo %s está disponible.",
+ "Install and activate additional PHP modules to choose other database types." : "Instala y activa módulos adicionales de PHP para seleccionar otros tipos de bases de datos. ",
+ "For more details check out the documentation." : "Por favor consulta la documentación para más detalles. ",
+ "Database user" : "Usuario de la base de datos",
+ "Database password" : "Contraseña de la base de datos",
+ "Database name" : "Nombre de la base de datos",
+ "Database tablespace" : "Espacio de tablas en la base de datos",
+ "Database host" : "Servidor de base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifica el número de puerto así como el nombre del servidor (ejem., localhost:5432).",
+ "Performance warning" : "Advertencia de desempeño",
+ "SQLite will be used as database." : "SQLite será usado como la base de datos.",
+ "For larger installations we recommend to choose a different database backend." : "Para instalaciones más grandes te recomendamos elegir un backend de base de datos diferente.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLiite es especialmente desalentado al usar el cliente de escritorio para sincrionizar. ",
+ "Finish setup" : "Terminar configuración",
+ "Finishing …" : "Terminando …",
+ "Need help?" : "¿Necesitas ayuda?",
+ "See the documentation" : "Ver la documentación",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere de JavaScript para su correcta operación. Por favor {linkstart}habilita JavaScript{linkend} y vuelve a cargar la página. ",
+ "More apps" : "Más aplicaciones",
+ "Search" : "Buscar",
+ "Reset search" : "Reestablecer búsqueda",
+ "Confirm your password" : "Confirma tu contraseña",
+ "Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
+ "Please contact your administrator." : "Por favor contacta al administrador.",
+ "An internal error occurred." : "Se presentó un error interno.",
+ "Please try again or contact your administrator." : "Por favor vuelve a intentarlo o contacta a tu adminsitrador. ",
+ "Username or email" : "Usuario o correo electrónico",
+ "Wrong password. Reset it?" : "Contraseña equivocada. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña inválida. ",
+ "Log in" : "Ingresar",
+ "Stay logged in" : "Mantener la sesión abierta",
+ "Alternative Logins" : "Accesos Alternativos",
+ "Account access" : "Acceo de cuenta",
+ "You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
+ "App token" : "Ficha de la aplicación",
+ "Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
+ "Redirecting …" : "Redireccionando ... ",
+ "New password" : "Nueva contraseña",
+ "New Password" : "Nueva Contraseña",
+ "Reset password" : "Restablecer contraseña",
+ "Two-factor authentication" : "Autenticación de dos-factores",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada está habilitada para tu cuenta. Favor de autenticarte usando un segundo factor. ",
+ "Cancel log in" : "Cancelar inicio de sesión",
+ "Use backup code" : "Usar código de respaldo",
+ "Error while validating your second factor" : "Se presentó un error al validar tu segundo factor",
+ "Access through untrusted domain" : "Accesa a través de un dominio no de confianza",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Por favor contacta a tu adminsitrador. Si tu eres un administrador, edita la propiedad \"trusted_domains\" en el archivo config/config.php como en el ejemplo config.sample.php.",
+ "Depending on your configuration, this button could also work to trust the domain:" : "Dependiendo de tu configuración, este botón podría funcionar también para confiar en el dominio:",
+ "Add \"%s\" as trusted domain" : "Agregar \"%s\" como un dominio de confianza",
+ "App update required" : "Se requiere una actualización de la aplicación",
+ "%s will be updated to version %s" : "%s será actualizado a la versión %s",
+ "These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
+ "These incompatible apps will be disabled:" : "Las siguientes aplicaciones incompatibles serán deshabilitadas:",
+ "The theme %s has been disabled." : "El tema %s ha sido deshabilitado. ",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Por favor asegurarte de que la base de datos, la carpeta de configuración y las carpetas de datos hayan sido respaldadas antes de continuar. ",
+ "Start update" : "Iniciar actualización",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar la expiración de tiempo en instalaciones grandes, puedes ejecutar el siguiente comando desde tu directorio de instalación:",
+ "Detailed logs" : "Bitácoras detalladas",
+ "Update needed" : "Se requiere de una actualización",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Favor de usar el actualizador desde la línea de comandos ya que tu instancia cuenta con más de 50 usuarios.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para más ayuda, consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">doccumentación</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Estoy conciente de que si continúo haciendo la actualización vía web, la interfaz de usuario corre el riesgo de que el tiempo de la solicitud expire y cause pérdida de datos, pero cuento con un respaldo y sé como restaurar mi instancia en caso de una falla. ",
+ "Upgrade via web on my own risk" : "Actualizar vía Web bajo mi propio riesgo",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Esta instancia %s se encuentra actualmente en modo mantenimiento, que podría tomar algo de tiempo. ",
+ "This page will refresh itself when the %s instance is available again." : "Esta página se actualizará sola cuando la instancia %s esté disponible de nuevo. ",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacta a tu administrador del sistema si este mensaje persiste o se presentó de manera inesperada.",
+ "Thank you for your patience." : "Gracias por tu paciencia.",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "Ok" : "Ok",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
+ "Error while unsharing" : "Se presentó un error al dejar de compartir",
+ "can reshare" : "puede volver a compartir",
+ "can edit" : "puede editar",
+ "can create" : "puede crear",
+ "can change" : "puede modificar",
+ "can delete" : "puede borrar",
+ "access control" : "control de acceso",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Comparte con personas en otros servidores usando sus IDs username@example.com/nextcloud",
+ "Share with users or by mail..." : "Compartir con otros usuarios o por correo electrónico...",
+ "Share with users or remote users..." : "Compartir con otros usuarios o con otros usuarios remotos...",
+ "Share with users, remote users or by mail..." : "Compartir con otros usuarios, otros usuarios remotos o por correo electrónico...",
+ "Share with users or groups..." : "Compartir con otros usuarios o grupos...",
+ "Share with users, groups or by mail..." : "Compartir con otros usuarios, grupos o por correo electrónico...",
+ "Share with users, groups or remote users..." : "Compartir con otros usuarios, otros usuarios remotos o grupos...",
+ "Share with users, groups, remote users or by mail..." : "Compartir con usuarios, grupos, usuarios rempotos o por correo...",
+ "Share with users..." : "Compartir con otros usuarios...",
+ "The object type is not specified." : "El tipo del objeto no está especificado.",
+ "Enter new" : "Ingresar nuevo",
+ "Add" : "Agregar",
+ "Edit tags" : "Editar etiquetas",
+ "Error loading dialog template: {error}" : "Se presentó un error al cargar la plantilla de diálogo: {error}",
+ "No tags selected for deletion." : "No se seleccionaron etiquetas para borrar.",
+ "The update was successful. Redirecting you to Nextcloud now." : "La actualización fue exitosa. Redirigiendote ahora a tu Nextcloud. ",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarte que %s ha compartido %s contigo.\n\nVelo aquí: %s\n\n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "The server encountered an internal error and was unable to complete your request." : "Se presentó un error interno en el servidor y no fue posible completar tu solicitud. ",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor contacta al administrador del servidor si este problema se presenta en múltiples ocasiones, por favor incluye los detalles técnicos siguientes en tu reporte. ",
+ "Log out" : "Salir",
+ "This action requires you to confirm your password:" : "Esta acción requiere que confirmes tu contraseña:",
+ "Use the following link to reset your password: {link}" : "Usa la siguiente liga para restablecer tu contraseña: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarte que %s ha compartido <strong>%s</strong> contigo. <br><a href=\"%s\">¡Velo!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "Esta instalación de Nextcloud se encuentra en modo de usuario único.",
+ "This means only administrators can use the instance." : "Esto significa que sólo los administradores pueden usar la instancia.",
+ "You are accessing the server from an untrusted domain." : "Estás accediendo al servidor desde un dominio no de confianza. ",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor contacta a tu administrador. Si eres el administrador de esta instancia, configura la opción \"trusted_domains\" en config/config.php. Un ejemplo de configuración se proporciona en config/config.sample.php. ",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependiendo de tu configuración, como adminsitrador podrías llegar a usar el botón inferior para confiar en este dominio. ",
+ "Please use the command line updater because you have a big instance." : "Por favor usa el actualizador de línea de comando porque cuentas con una instancia grande. ",
+ "You are about to grant \"%s\" access to your %s account." : "Estás apunto de concederle a \"%s\" acceso a yu cuenta %s."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es_DO.json b/core/l10n/es_DO.json
new file mode 100644
index 00000000000..02d82b31876
--- /dev/null
+++ b/core/l10n/es_DO.json
@@ -0,0 +1,355 @@
+{ "translations": {
+ "Please select a file." : "Por favor selecciona un archivo.",
+ "File is too big" : "El archivo es demasiado grande.",
+ "The selected file is not an image." : "El archivo seleccionado no es una imagen.",
+ "The selected file cannot be read." : "El archivo seleccionado no se puede leer.",
+ "Invalid file provided" : "Archivo proporcionado inválido",
+ "No image or file provided" : "No se especificó un archivo o imagen",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "An error occurred. Please contact your admin." : "Se presentó un error. Por favor contacta a tu adminsitrador. ",
+ "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, por favor inténtalo de nuevo",
+ "No crop data provided" : "No se han proporcionado datos del recorte",
+ "No valid crop data provided" : "No se han proporcionado datos válidos del recorte",
+ "Crop is not square" : "El recorte no es cuadrado",
+ "State token does not match" : "La ficha de estado no corresponde",
+ "Password reset is disabled" : "Restablecer contraseña se encuentra deshabilitado",
+ "Couldn't reset password because the token is invalid" : "No ha sido posible restablecer la contraseña porque la ficha es inválida",
+ "Couldn't reset password because the token is expired" : "No ha sido posible restablecer la contraseña porque la ficha ha expirado",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Por favor contacta a tu adminsitrador. ",
+ "%s password reset" : "%s restablecer la contraseña",
+ "Password reset" : "Restablecer contraseña",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en el siguiente botón para restablecer tu contraseña. Si no has solicitado restablecer su contraseña, por favor ignora este correo. ",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en la siguiente liga para restablecer su contraseña. Si no has solicitado restablecer la contraseña, por favor ignora este mensaje. ",
+ "Reset your password" : "Restablecer tu contraseña",
+ "Couldn't send reset email. Please contact your administrator." : "No fue posible enviar el correo de restauración. Por favor contacta a tu adminsitrador. ",
+ "Couldn't send reset email. Please make sure your username is correct." : "No fue posible restablecer el correo electrónico. Por favor asegurarte de que tu nombre de usuario sea correcto. ",
+ "Preparing update" : "Preparando actualización",
+ "[%d / %d]: %s" : "[%d / %d]: %s ",
+ "Repair warning: " : "Advertencia de reparación:",
+ "Repair error: " : "Error de reparación: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor usa el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabla %s",
+ "Turned on maintenance mode" : "Modo mantenimiento activado",
+ "Turned off maintenance mode" : "Modo mantenimiento desactivado",
+ "Maintenance mode is kept active" : "El modo mantenimiento sigue activo",
+ "Updating database schema" : "Actualizando esquema de base de datos",
+ "Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando si el archivo del esquema de base de datos puede ser actualizado (esto puedo tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update" : "Actualización del esquema de base de datos verificada",
+ "Checking updates of apps" : "Verificando actualizaciones para aplicaciones",
+ "Checking for update of app \"%s\" in appstore" : "Verificando actualizaciones para la aplicacion \"%s\" en la appstore",
+ "Update app \"%s\" from appstore" : "Actualizar la aplicación \"%s\" desde la appstore",
+ "Checked for update of app \"%s\" in appstore" : "Se verificaron actualizaciones para la aplicación \"%s\" en la appstore",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update for apps" : "Se verificó la actualización del esquema de la base de datos para las aplicaciones",
+ "Updated \"%s\" to %s" : "Actualizando \"%s\" a %s",
+ "Set log level to debug" : "Establecer nivel de bitacora a depurar",
+ "Reset log level" : "Restablecer nivel de bitácora",
+ "Starting code integrity check" : "Comenzando verificación de integridad del código",
+ "Finished code integrity check" : "Terminó la verificación de integridad del código ",
+ "%s (3rdparty)" : "%s (de 3ros)",
+ "%s (incompatible)" : "%s (incompatible)",
+ "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s",
+ "Already up to date" : "Ya está actualizado",
+ "Search contacts …" : "Buscar contactos ...",
+ "No contacts found" : "No se encontraron contactos",
+ "Show all contacts …" : "Mostrar todos los contactos ...",
+ "There was an error loading your contacts" : "Se presentó un error al cargar tus contactos",
+ "Loading your contacts …" : "Cargando sus contactos ... ",
+ "Looking for {term} …" : "Buscando {term} ...",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Más información ...</a>",
+ "No action available" : "No hay acciones disponibles",
+ "Error fetching contact actions" : "Se presentó un error al traer las acciónes de contatos",
+ "Settings" : "Configuraciones ",
+ "Connection to server lost" : "Se ha perdido la conexión con el servidor",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"],
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Descartar",
+ "This action requires you to confirm your password" : "Esta acción requiere que confirmes tu contraseña",
+ "Authentication required" : "Se requiere autenticación",
+ "Password" : "Contraseña",
+ "Cancel" : "Cancelar",
+ "Confirm" : "Confirmar",
+ "Failed to authenticate, try again" : "Falla en la autenticación, por favor reintentalo",
+ "seconds ago" : "hace segundos",
+ "Logging in …" : "Iniciando sesión ...",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "La liga para restablecer tu contraseña ha sido enviada a tu correo electrónico. Si no lo recibes dentro de un tiempo razonable, verifica las carpetas de spam/basura.<br>Si no la encuentras consulta a tu adminstrador local.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. No habrá manera de recuperar tus datos una vez que restablezca tu contraseña. <br />Si no estás seguro de qué hacer, por favor contacta a tu administrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "I know what I'm doing" : "Sé lo que estoy haciendo",
+ "Password can not be changed. Please contact your administrator." : "Las contraseñas no se pueden cambiar. Por favor contacta a tu adminstrador",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hay archivos aquí",
+ "Choose" : "Seleccionar",
+ "Copy" : "Copiar",
+ "Move" : "Mover",
+ "Error loading file picker template: {error}" : "Se presentó un error al cargar la plantilla del seleccionador de archivos: {error}",
+ "OK" : "OK",
+ "Error loading message template: {error}" : "Se presentó un error al cargar la plantilla del mensaje: {error}",
+ "read-only" : "sólo-lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos en el archivo"],
+ "One file conflict" : "Un conflicto en el archivo",
+ "New Files" : "Archivos Nuevos",
+ "Already existing files" : "Archivos ya existentes",
+ "Which files do you want to keep?" : "¿Cuales archivos deseas mantener?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si seleccionas ambas versiones, se le agregará un número al nombre del archivo copiado.",
+ "Continue" : "Continuar",
+ "(all selected)" : "(todos seleccionados)",
+ "({count} selected)" : "({count} seleccionados)",
+ "Error loading file exists template" : "Se presentó un error al cargar la plantilla de existe archivo ",
+ "Pending" : "Pendiente",
+ "Copy to {folder}" : "Copiar a {folder}",
+ "Move to {folder}" : "Mover a {folder}",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Tu servidor web aún no se encuentra correctamente configurado para permitir la sincronización de archivos porque la interface de WebDAV parece estar rota. ",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Tu servidor web no está correctamente configurado para resolver \"{url}\". Puedes encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "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. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no cuenta con una conexión a Internet: No fue posible alcanzar diversos puntos de acceso <EndPoints>. Esto significa que algunas funcionalidades como el montaje de almacenamiento externo, notificaciónes de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Acceder archivos de forma remota y el envío de correos electrónicos de notificación puede que tampoco funcionen. Te sugerimos habilitar la conexión a Internet para este servidor si deseas contar con todas las características.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No ha sido configurada la memoria caché. Por favor configura un memechache si está disponible para mejorar el desempeño. Puedes encontrar información adicional en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No fue posible leer /dev/urandom por PHP que es altamente desalentado por razones de seguridad. Puedes obtener más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Estás usando PHP {version}. Te recomendamos actualizar tu versión de PHP para aprovechar <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">las actualizaciones de seguridad y desempeño suministradas por el Grupo PHP</a> tan pronto como tu distribución lo soporte. ",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "La configuración de los encabezados del proxy inverso es incorrecta, o estás accediendo a Nextcloud desde un proxy de confianza. Si no estás accediendo a Nextcloud desde un proxy de confianza, se trata de un tema de seguridad y le puede permitir a un atacante hacer su dirección IP apócrifa visible para Nextcloud. Puedes encontar más infomración en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como un caché distribuido, pero el módulo equivocado PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached sólo soporta \"memchached\" y no \"memchache\". Por favor ve el <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki de ambos módulos</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Algunos archivos no pasaron la verificación de integridad. Para más información de cómo resolver este tema consulta nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listado de archivos inválidos …</a> / <a href=\"{rescanEndpoint}\">Volver a escanear…</a>)",
+ "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "El PHP OPcache no está configurado correctamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para un mejor desempeño, recomendamos </a> usar las siguientes configuraciones en php.ini:<code>",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La fución PHP \"set_time_limit\" no está disponible. Esto podría generar scripts que se interrumpan a media ejecución, rompiendo la instalación. Te recomendamos ámpliamente habilitar esta función.",
+ "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus archivos y directorio de datos sean accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente configurar tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "El encabezado HTTP \"{header}\" no está configurado como \"{expected}\". Este es un riesgo potencial de seguridad o privacidad y te recomendamos cambiar esta configuración.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
+ "Shared" : "Compartido",
+ "Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
+ "The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
+ "Set expiration date" : "Selecciona la vigencia de tu archivo",
+ "Expiration" : "Expiración",
+ "Expiration date" : "Fecha de expiración",
+ "Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
+ "Choose a password for the public link or press the \"Enter\" key" : "Elige una contraseña para la liga pública o presiona la tecla \"Intro\"",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No está soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Resharing is not allowed" : "No se permite volver a compartir",
+ "Share to {name}" : "Compartir con {name}",
+ "Share link" : "Compartir liga",
+ "Link" : "Liga",
+ "Password protect" : "Proteger con contraseña",
+ "Allow editing" : "Permitir editar",
+ "Email link to person" : "Enviar la liga por correo electrónico a una persona",
+ "Send" : "Enviar",
+ "Allow upload and editing" : "Permitir carga y edición",
+ "Read only" : "Sólo lectura",
+ "File drop (upload only)" : "Permitir carga",
+ "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}",
+ "Shared with you by {owner}" : "Compartido contigo por {owner}",
+ "Choose a password for the mail share" : "Elige una contraseña para el elemento compartido por correo",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compartido mediante una liga",
+ "group" : "grupo",
+ "remote" : "remoto",
+ "email" : "correo electrónico",
+ "shared by {sharer}" : "compartido por {sharer}",
+ "Unshare" : "Dejar de compartir",
+ "Can reshare" : "Puede volver a compartir",
+ "Can edit" : "Puede editar",
+ "Can create" : "Puede crear",
+ "Can change" : "Puede cambiar",
+ "Can delete" : "Puede borrar",
+ "Access control" : "Control de acceso",
+ "Could not unshare" : "No fue posible dejar de compartir",
+ "Error while sharing" : "Se presentó un error al compartir",
+ "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar truncada - por favor refina tus términos de búsqueda para poder ver más resultados. ",
+ "No users or groups found for {search}" : "No se encontraron usuarios o gurpos para {search}",
+ "No users found for {search}" : "No se encontraron usuarios para {search}",
+ "An error occurred. Please try again" : "Se presentó un error. Por favor vuelve a intentarlo",
+ "{sharee} (group)" : "{sharee} (grupo)",
+ "{sharee} (remote)" : "{sharee} (remoto)",
+ "{sharee} (email)" : "{sharee} (correo electrónico)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "Share" : "Compartir",
+ "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Comparte con otras personas ingresando una dirección de correo electrónico.",
+ "Share with other people by entering a user or group or a federated cloud ID." : "Comparte con otras personas ingresando un usuario o un grupo.",
+ "Share with other people by entering a user or group or an email address." : "Comparte con otras personas ingresando un usuario, un grupo o una dirección de correo electrónico.",
+ "Name or email address..." : "Nombre o dirección de correo electrónico",
+ "Name or federated cloud ID..." : "Nombre...",
+ "Name, federated cloud ID or email address..." : "Nombre o dirección de correo electrónico...",
+ "Name..." : "Nombre...",
+ "Error" : "Error",
+ "Error removing share" : "Se presentó un error al dejar de compartir",
+ "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente",
+ "restricted" : "restringido",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Borrar",
+ "Rename" : "Renombrar",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "No tags found" : "No se encontraron etiquetas",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
+ "sunny" : "soleado",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el clima es {weather}",
+ "Hello {name}" : "Hola {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Estos son los resultados de tu búsqueda <script>alert(1)</script></strong>",
+ "new" : "nuevo",
+ "_download %n file_::_download %n files_" : ["Descargar %n archivos","Descargar %n archivos"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, abandonar esta página puede interrumpir el proceso en algunos ambientes. ",
+ "Update to {version}" : "Actualizar a {version}",
+ "An error occurred." : "Se presentó un error.",
+ "Please reload the page." : "Por favor vuelve a cargar la página.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización no fue exitosa. Para más información <a href=\"{url}\">consulta nuestro comentario en el foro </a> que cubre este tema. ",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización no fue exitosa. Por favor reporta este tema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Comunidad Nextcloud</a>.",
+ "Continue to Nextcloud" : "Continuar a Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundo. ","La actualización fue exitosa. Te redireccionaremos a Nextcloud en %n segundos."],
+ "Searching other places" : "Buscando en otras ubicaciones",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados para la búsqueda {tag}{filter}{endtag} en otras carpetas",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de la búsqueda en otra carpeta","{count} resultados de la búsqueda en otras carpetas"],
+ "Personal" : "Personal",
+ "Users" : "Usuarios",
+ "Apps" : "Aplicaciones",
+ "Admin" : "Administración",
+ "Help" : "Ayuda",
+ "Access forbidden" : "Acceso prohibido",
+ "File not found" : "Archivo no encontrado",
+ "The specified document has not been found on the server." : "El documento especificado no ha sido encontrado en el servidor. ",
+ "You can click here to return to %s." : "Puedes hacer click aquí para regresar a %s.",
+ "Internal Server Error" : "Error interno del servidor",
+ "The server was unable to complete your request." : "El servidor no pudo completar tu solicitud.",
+ "If this happens again, please send the technical details below to the server administrator." : "Si esto vuelve a suceder, por favor envia los detalles tecnicos siguientes al adminsitrador del sistema.",
+ "More details can be found in the server log." : "Puedes consultar más detalles en la bitácora del servidor. ",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección Remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "Type: %s" : "Tipo: %s",
+ "Code: %s" : "Código: %s",
+ "Message: %s" : "Mensaje: %s",
+ "File: %s" : "Archivo: %s",
+ "Line: %s" : "Línea: %s",
+ "Trace" : "Rastrear",
+ "Security warning" : "Advertencia de seguridad",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y sus archivos probablemente sean accesibles desde Internet ya que el archivo .htaccess no funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para más información de cómo configurar propiamente tu servidor, por favor ve la <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentación</a>.",
+ "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Usuario",
+ "Storage & database" : "Almacenamiento & base de datos",
+ "Data folder" : "Carpeta de datos",
+ "Configure the database" : "Configurar la base de datos",
+ "Only %s is available." : "Sólo %s está disponible.",
+ "Install and activate additional PHP modules to choose other database types." : "Instala y activa módulos adicionales de PHP para seleccionar otros tipos de bases de datos. ",
+ "For more details check out the documentation." : "Por favor consulta la documentación para más detalles. ",
+ "Database user" : "Usuario de la base de datos",
+ "Database password" : "Contraseña de la base de datos",
+ "Database name" : "Nombre de la base de datos",
+ "Database tablespace" : "Espacio de tablas en la base de datos",
+ "Database host" : "Servidor de base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifica el número de puerto así como el nombre del servidor (ejem., localhost:5432).",
+ "Performance warning" : "Advertencia de desempeño",
+ "SQLite will be used as database." : "SQLite será usado como la base de datos.",
+ "For larger installations we recommend to choose a different database backend." : "Para instalaciones más grandes te recomendamos elegir un backend de base de datos diferente.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLiite es especialmente desalentado al usar el cliente de escritorio para sincrionizar. ",
+ "Finish setup" : "Terminar configuración",
+ "Finishing …" : "Terminando …",
+ "Need help?" : "¿Necesitas ayuda?",
+ "See the documentation" : "Ver la documentación",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere de JavaScript para su correcta operación. Por favor {linkstart}habilita JavaScript{linkend} y vuelve a cargar la página. ",
+ "More apps" : "Más aplicaciones",
+ "Search" : "Buscar",
+ "Reset search" : "Reestablecer búsqueda",
+ "Confirm your password" : "Confirma tu contraseña",
+ "Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
+ "Please contact your administrator." : "Por favor contacta al administrador.",
+ "An internal error occurred." : "Se presentó un error interno.",
+ "Please try again or contact your administrator." : "Por favor vuelve a intentarlo o contacta a tu adminsitrador. ",
+ "Username or email" : "Usuario o correo electrónico",
+ "Wrong password. Reset it?" : "Contraseña equivocada. ¿Deseas restablecerla?",
+ "Wrong password." : "Contraseña inválida. ",
+ "Log in" : "Ingresar",
+ "Stay logged in" : "Mantener la sesión abierta",
+ "Alternative Logins" : "Accesos Alternativos",
+ "Account access" : "Acceo de cuenta",
+ "You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
+ "App token" : "Ficha de la aplicación",
+ "Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
+ "Redirecting …" : "Redireccionando ... ",
+ "New password" : "Nueva contraseña",
+ "New Password" : "Nueva Contraseña",
+ "Reset password" : "Restablecer contraseña",
+ "Two-factor authentication" : "Autenticación de dos-factores",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada está habilitada para tu cuenta. Favor de autenticarte usando un segundo factor. ",
+ "Cancel log in" : "Cancelar inicio de sesión",
+ "Use backup code" : "Usar código de respaldo",
+ "Error while validating your second factor" : "Se presentó un error al validar tu segundo factor",
+ "Access through untrusted domain" : "Accesa a través de un dominio no de confianza",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Por favor contacta a tu adminsitrador. Si tu eres un administrador, edita la propiedad \"trusted_domains\" en el archivo config/config.php como en el ejemplo config.sample.php.",
+ "Depending on your configuration, this button could also work to trust the domain:" : "Dependiendo de tu configuración, este botón podría funcionar también para confiar en el dominio:",
+ "Add \"%s\" as trusted domain" : "Agregar \"%s\" como un dominio de confianza",
+ "App update required" : "Se requiere una actualización de la aplicación",
+ "%s will be updated to version %s" : "%s será actualizado a la versión %s",
+ "These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
+ "These incompatible apps will be disabled:" : "Las siguientes aplicaciones incompatibles serán deshabilitadas:",
+ "The theme %s has been disabled." : "El tema %s ha sido deshabilitado. ",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Por favor asegurarte de que la base de datos, la carpeta de configuración y las carpetas de datos hayan sido respaldadas antes de continuar. ",
+ "Start update" : "Iniciar actualización",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar la expiración de tiempo en instalaciones grandes, puedes ejecutar el siguiente comando desde tu directorio de instalación:",
+ "Detailed logs" : "Bitácoras detalladas",
+ "Update needed" : "Se requiere de una actualización",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Favor de usar el actualizador desde la línea de comandos ya que tu instancia cuenta con más de 50 usuarios.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para más ayuda, consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">doccumentación</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Estoy conciente de que si continúo haciendo la actualización vía web, la interfaz de usuario corre el riesgo de que el tiempo de la solicitud expire y cause pérdida de datos, pero cuento con un respaldo y sé como restaurar mi instancia en caso de una falla. ",
+ "Upgrade via web on my own risk" : "Actualizar vía Web bajo mi propio riesgo",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Esta instancia %s se encuentra actualmente en modo mantenimiento, que podría tomar algo de tiempo. ",
+ "This page will refresh itself when the %s instance is available again." : "Esta página se actualizará sola cuando la instancia %s esté disponible de nuevo. ",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacta a tu administrador del sistema si este mensaje persiste o se presentó de manera inesperada.",
+ "Thank you for your patience." : "Gracias por tu paciencia.",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
+ "Ok" : "Ok",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
+ "Error while unsharing" : "Se presentó un error al dejar de compartir",
+ "can reshare" : "puede volver a compartir",
+ "can edit" : "puede editar",
+ "can create" : "puede crear",
+ "can change" : "puede modificar",
+ "can delete" : "puede borrar",
+ "access control" : "control de acceso",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Comparte con personas en otros servidores usando sus IDs username@example.com/nextcloud",
+ "Share with users or by mail..." : "Compartir con otros usuarios o por correo electrónico...",
+ "Share with users or remote users..." : "Compartir con otros usuarios o con otros usuarios remotos...",
+ "Share with users, remote users or by mail..." : "Compartir con otros usuarios, otros usuarios remotos o por correo electrónico...",
+ "Share with users or groups..." : "Compartir con otros usuarios o grupos...",
+ "Share with users, groups or by mail..." : "Compartir con otros usuarios, grupos o por correo electrónico...",
+ "Share with users, groups or remote users..." : "Compartir con otros usuarios, otros usuarios remotos o grupos...",
+ "Share with users, groups, remote users or by mail..." : "Compartir con usuarios, grupos, usuarios rempotos o por correo...",
+ "Share with users..." : "Compartir con otros usuarios...",
+ "The object type is not specified." : "El tipo del objeto no está especificado.",
+ "Enter new" : "Ingresar nuevo",
+ "Add" : "Agregar",
+ "Edit tags" : "Editar etiquetas",
+ "Error loading dialog template: {error}" : "Se presentó un error al cargar la plantilla de diálogo: {error}",
+ "No tags selected for deletion." : "No se seleccionaron etiquetas para borrar.",
+ "The update was successful. Redirecting you to Nextcloud now." : "La actualización fue exitosa. Redirigiendote ahora a tu Nextcloud. ",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarte que %s ha compartido %s contigo.\n\nVelo aquí: %s\n\n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "The server encountered an internal error and was unable to complete your request." : "Se presentó un error interno en el servidor y no fue posible completar tu solicitud. ",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Por favor contacta al administrador del servidor si este problema se presenta en múltiples ocasiones, por favor incluye los detalles técnicos siguientes en tu reporte. ",
+ "Log out" : "Salir",
+ "This action requires you to confirm your password:" : "Esta acción requiere que confirmes tu contraseña:",
+ "Use the following link to reset your password: {link}" : "Usa la siguiente liga para restablecer tu contraseña: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarte que %s ha compartido <strong>%s</strong> contigo. <br><a href=\"%s\">¡Velo!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "Esta instalación de Nextcloud se encuentra en modo de usuario único.",
+ "This means only administrators can use the instance." : "Esto significa que sólo los administradores pueden usar la instancia.",
+ "You are accessing the server from an untrusted domain." : "Estás accediendo al servidor desde un dominio no de confianza. ",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor contacta a tu administrador. Si eres el administrador de esta instancia, configura la opción \"trusted_domains\" en config/config.php. Un ejemplo de configuración se proporciona en config/config.sample.php. ",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependiendo de tu configuración, como adminsitrador podrías llegar a usar el botón inferior para confiar en este dominio. ",
+ "Please use the command line updater because you have a big instance." : "Por favor usa el actualizador de línea de comando porque cuentas con una instancia grande. ",
+ "You are about to grant \"%s\" access to your %s account." : "Estás apunto de concederle a \"%s\" acceso a yu cuenta %s."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
index 6239f9520c3..2572a49ed86 100644
--- a/core/l10n/es_MX.js
+++ b/core/l10n/es_MX.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
"Set expiration date" : "Selecciona la vigencia de tu archivo",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Accesos Alternativos",
"Account access" : "Acceo de cuenta",
"You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
"App token" : "Ficha de la aplicación",
"Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
"Redirecting …" : "Redireccionando ... ",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Se presentó un error al dejar de compartir",
"can reshare" : "puede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
index e5f21d06910..02d82b31876 100644
--- a/core/l10n/es_MX.json
+++ b/core/l10n/es_MX.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "El encabezado HTTP \"Strict-Transport-Security\" no está configurado a al menos \"{seconds}\" segundos. Para mejorar la seguridad, te recomendamos habilitar HSTS como se describe en nuestros <a href=\"{docUrl}\" rel=\"noreferrer\">consejos de seguridad</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Estás accediendo este sitio via HTTP. Te recomendamos ámpliamente que configures tu servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
"Shared" : "Compartido",
- "Shared with {recipients}" : "Compartido con {recipients}",
"Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
"The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
"Set expiration date" : "Selecciona la vigencia de tu archivo",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Accesos Alternativos",
"Account access" : "Acceo de cuenta",
"You are about to grant %s access to your %s account." : "Estas a punto de otorgar acceso de %s a tu cuenta %s.",
+ "Grant access" : "Conceder acceso",
"App token" : "Ficha de la aplicación",
"Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación",
"Redirecting …" : "Redireccionando ... ",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tus archivos están encriptados. Si no has habilitado la llave de recuperación, no habrá manera de que puedas recuperar tus datos una vez que restablezcas tu contraseña.<br />Si no estás seguro de lo que estás haciendo, por favor contacta a tu adminstrador antes de continuar. <br />¿Realmente deseas continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Posiblemente tus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Te recomendamos ámpliamente que configures tu servidor web de tal modo que el directorio de datos no sea accesible o que muevas el directorio de datos fuera de la raíz de documentos del servidor web. ",
+ "Shared with {recipients}" : "Compartido con {recipients}",
"Error while unsharing" : "Se presentó un error al dejar de compartir",
"can reshare" : "puede volver a compartir",
"can edit" : "puede editar",
diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js
index 76376996287..8be449176e7 100644
--- a/core/l10n/et_EE.js
+++ b/core/l10n/et_EE.js
@@ -102,7 +102,6 @@ OC.L10N.register(
"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. We suggest to enable Internet connection for this server if you want to have all features." : "Serveril puudub toimiv internetiühendus: mitmete lõpp-punktidega ei saavutatud ühendust. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, teavitused uuendustest või kolmandate osapoolte rakenduste paigaldamine ei tööta. Eemalt failidele ligipääs ning teadete saatmine emailiga ei pruugi samuti toimida. Kui soovid täielikku funktsionaalsust, siis soovitame serverile tagada ligipääs internetti.",
"Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga",
"Shared" : "Jagatud",
- "Shared with {recipients}" : "Jagatud {recipients}",
"Error setting expiration date" : "Viga aegumise kuupäeva määramisel",
"The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist",
"Set expiration date" : "Määra aegumise kuupäev",
@@ -254,6 +253,7 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Tõrge lehe laadimisel, ümberlaadimine 5 sekundi pärast",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
"Ok" : "Ok",
+ "Shared with {recipients}" : "Jagatud {recipients}",
"Error while unsharing" : "Viga jagamise lõpetamisel",
"can reshare" : "võib edasi jagada",
"can edit" : "saab muuta",
diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json
index 1376eff80c6..affbc23f8d0 100644
--- a/core/l10n/et_EE.json
+++ b/core/l10n/et_EE.json
@@ -100,7 +100,6 @@
"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. We suggest to enable Internet connection for this server if you want to have all features." : "Serveril puudub toimiv internetiühendus: mitmete lõpp-punktidega ei saavutatud ühendust. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, teavitused uuendustest või kolmandate osapoolte rakenduste paigaldamine ei tööta. Eemalt failidele ligipääs ning teadete saatmine emailiga ei pruugi samuti toimida. Kui soovid täielikku funktsionaalsust, siis soovitame serverile tagada ligipääs internetti.",
"Error occurred while checking server setup" : "Serveri seadete kontrolimisel tekkis viga",
"Shared" : "Jagatud",
- "Shared with {recipients}" : "Jagatud {recipients}",
"Error setting expiration date" : "Viga aegumise kuupäeva määramisel",
"The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist",
"Set expiration date" : "Määra aegumise kuupäev",
@@ -252,6 +251,7 @@
"Problem loading page, reloading in 5 seconds" : "Tõrge lehe laadimisel, ümberlaadimine 5 sekundi pärast",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sinu failid on krüpteeritud. Kui sa pole taastamise võtit veel määranud, siis pole präast parooli taastamist mingit võimalust sinu andmeid tagasi saada. <br />Kui sa pole kindel, mida teha, siis palun väta enne jätkamist ühendust oma administaatoriga. <br />Oled sa kindel, et sa soovid jätkata?",
"Ok" : "Ok",
+ "Shared with {recipients}" : "Jagatud {recipients}",
"Error while unsharing" : "Viga jagamise lõpetamisel",
"can reshare" : "võib edasi jagada",
"can edit" : "saab muuta",
diff --git a/core/l10n/eu.js b/core/l10n/eu.js
index 96df4005ce4..92ed8512284 100644
--- a/core/l10n/eu.js
+++ b/core/l10n/eu.js
@@ -46,12 +46,12 @@ OC.L10N.register(
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "%s datu-basearen eskema eguneratu daitekeen egiaztatzen (honek luzerako hartu dezake datu-basearen arabera)",
"Checked database schema update for apps" : "Egiaztatuta aplikazioen datu-basearen zerbitzariaren eguneraketa",
"Updated \"%s\" to %s" : "\"%s\" %s-ra eguneratua",
- "Set log level to debug" : "Set log level to debug",
- "Reset log level" : "Reset log level",
+ "Set log level to debug" : "Log maila debug-era ezarri",
+ "Reset log level" : "Log maila berrezarri",
"Starting code integrity check" : "Kodearen integritate egiaztapena hasten",
"Finished code integrity check" : "Kodearen integritate egiaztapena bukatuta",
- "%s (3rdparty)" : "%s (3rdparty)",
- "%s (incompatible)" : "%s (incompatible)",
+ "%s (3rdparty)" : "%s (hirugarrenekoa)",
+ "%s (incompatible)" : "%s (bateraezina)",
"Following apps have been disabled: %s" : "Hurrengo aplikazioak desgaitu egin dira: %s",
"Already up to date" : "Dagoeneko eguneratuta",
"Search contacts …" : "Bilatu kontaktuak ...",
@@ -61,6 +61,7 @@ OC.L10N.register(
"Loading your contacts …" : "Zure kontaktuak kargatzen...",
"Looking for {term} …" : "{term} bilatzen...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Kodearen integritate egiaztapenarekin arazoak egon dira. Informazio gehiago…</a>",
+ "No action available" : "Ez dago ekintzarik eskuragarri",
"Error fetching contact actions" : "Errorea kontaktu-ekintzak eskuratzean",
"Settings" : "Ezarpenak",
"Connection to server lost" : "Zerbitzariarekiko konexioa eten da",
@@ -84,6 +85,7 @@ OC.L10N.register(
"No files in here" : "Ez dago fitxategirik hemen",
"Choose" : "Aukeratu",
"Copy" : "Kopiatu",
+ "Move" : "Mugitu",
"Error loading file picker template: {error}" : "Errorea fitxategi hautatzaile txantiloiak kargatzerakoan: {error}",
"OK" : "Ados",
"Error loading message template: {error}" : "Errorea mezu txantiloia kargatzean: {error}",
@@ -99,6 +101,8 @@ OC.L10N.register(
"({count} selected)" : "({count} hautatuta)",
"Error loading file exists template" : "Errorea fitxategia existitzen da txantiloiak kargatzerakoan",
"Pending" : "Zain",
+ "Copy to {folder}" : "{karpetara} kopiatu",
+ "Move to {folder}" : "{karpetara} mugitu",
"Very weak password" : "Pasahitz oso ahula",
"Weak password" : "Pasahitz ahula",
"So-so password" : "Halamoduzko pasahitza",
@@ -106,8 +110,8 @@ OC.L10N.register(
"Strong password" : "Pasahitz sendoa",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Zure web zerbitzaria ez dago oraindik konfiguratuta fitxategia sinkronizazioa ahalbidetzeko WebDAV interfazea badirudi hautsita dagoela.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Zure web zerbitzaria ez dago behar bezala konfiguratuta \"{url}\" irekitzeko. Informazio gehiago gure <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentazioan </a> aurki daiteke.",
- "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. We suggest to enable Internet connection for this server if you want to have all features." : "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. We suggest to enable Internet connection for this server if you want to have all features.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
+ "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. We suggest to enable Internet connection for this server if you want to have all features." : "Zerbitzari honek ez du Interneteko konexiorik: Helburu asko ezin dira atzitu.Honek esan nahi du kanpo biltegiratzeak, eguneraketei buruzko notifikazioak edo hirugarrenen aplikazioak ez dutela funtzionatuko. Urruneko fitxategiak atzitzea eta notifikazio emailek ere ez dute funtzionatuko ziuraski. Internet konexioa gaitzea gomendatzen dizugu, ezaugarri guzti hauek nahi badituzu. ",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ez da katxe memoriarik konfiguratu. Funtzionamendua hobetzeko konfigura mesedez configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it.",
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
@@ -115,11 +119,11 @@ OC.L10N.register(
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
"The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache ez dago era egokian ezarrita. Hobe funtzionatzeko gomendatzen dugu hurrengo ezarpenak erabiltzea php.ini fitxategian:",
"Error occurred while checking server setup" : "Akatsa gertatu da zerbitzariaren konfigurazioa egiaztatzean",
- "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.",
- "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Zure datu karpeta eta zure fitxategiak Internetetik atzigarri daude. .htaccess fitxategia ez dabil. Bereziki gomendatzen da zure web zerbitzariazure datu karpeta atzigarri ez egoteko konfiguratzea, edo datu-karpeta ateratzeaweb zerbitzariaren errotik",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP goiburua ez da \"{expected}\" hau bezalakoa. Segurtasun edo pribatutasuna arazo bat da hau eta ezarpen hau egokitzea gomendatzen dizugu",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Garraio segurtasun-zehatza\" HTTP goiburua ez dago konfiguratua gutxienez \"{seconds}\" segundurekin. Segurtasuna hobetzeko HSTS gaitzea gomendatzen dugu, <a href=\"{docUrl}\" rel=\"noreferrer\">segurtasun aholkuak</a>gida jarraiki.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Elkarbanatuta",
- "Shared with {recipients}" : "{recipients}-rekin partekatua.",
"Error setting expiration date" : "Errore bat egon da muga data ezartzean",
"The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.",
"Set expiration date" : "Ezarri muga data",
@@ -160,13 +164,15 @@ OC.L10N.register(
"Could not unshare" : "Ezin izan da despartekatu",
"Error while sharing" : "Errore bat egon da elkarbanatzean",
"Share details could not be loaded for this item." : "Partekatze xehetasunak ezin izan dira elementu honentzat kargatu.",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Autosaketaren funtziorako {count} karaketere gutxienez behar dira","Autosaketaren funtziorako {count} karaketere gutxienez behar dira"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Gerta daiteke zerrenda hau moztu behar izatea - mesedez, zure bilaketa birfindu emaitza gehiago ikusteko",
"No users or groups found for {search}" : "Ez dira {search} -rentzat erabiltzaile edo talderik aurkitu",
"No users found for {search}" : "Ez dira {search} -rentzat erabiltzailerik aurkitu",
"An error occurred. Please try again" : "Errore bat gertatu da. Saiatu berriro.",
- "{sharee} (group)" : "{sharee} (group)",
- "{sharee} (remote)" : "{sharee} (remote)",
+ "{sharee} (group)" : "{sharee} (taldea)",
+ "{sharee} (remote)" : "{sharee} (urrunekoa)",
"{sharee} (email)" : "{sharee} (email)",
- "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {jabea})",
"Share" : "Partekatu",
"Share with other people by entering a user or group, a federated cloud ID or an email address." : "Parteka ezazu jendearekin taldeko erabiltzailea, federatutako hodei baten IDa edo e-posta helbide bat sartuta.",
"Share with other people by entering a user or group or a federated cloud ID." : "Parteka ezazu jendearekin taldeko erabiltzailea edo federatutako hodei baten IDa sartuta.",
@@ -190,6 +196,7 @@ OC.L10N.register(
"sunny" : "eguzkitsua",
"Hello {name}, the weather is {weather}" : "Kaixo {name}, eguraldia {weather} da",
"Hello {name}" : "Kaixo {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Hauek dira zure bilaketaren emaitzak:<script>alert(1)</script></strong>",
"new" : "Berria",
"_download %n file_::_download %n files_" : ["%n fitxategia jaitsi","jaitsi %n fitxategiak"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "Eguneratzea abian da, orri hau utziz prozesua eten liteke ingurune batzuetan.",
@@ -199,6 +206,7 @@ OC.L10N.register(
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.",
"Continue to Nextcloud" : "Nextcloudera abiatu",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Eguneraketa ongi joan da. %n segundu barru Nextcloud-era birbideratuko zaitugu","Eguneraketa ongi joan da. %n segundu barru Nextcloud-era birbideratuko zaitugu"],
"Searching other places" : "Beste lekuak bilatzen",
"No search results in other folders for {tag}{filter}{endtag}" : "{tag}{filter}{endtag}-rentzat ez da emaitzarik topatu karpetetan",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} bilaketa-emaitza beste karpeta batean","{count} bilaketa-emaitzak beste karpetetan"],
@@ -212,6 +220,8 @@ OC.L10N.register(
"The specified document has not been found on the server." : "Zehaztutako dokumentua ez da zerbitzarian aurkitu.",
"You can click here to return to %s." : "Hemen klika dezakezu %sra itzultzeko.",
"Internal Server Error" : "Zerbitzariaren Barne Errorea",
+ "The server was unable to complete your request." : "Zerbitzariak ezin du zure eskaera bete",
+ "If this happens again, please send the technical details below to the server administrator." : "Berriz gertatzen bada, ondoko datu teknikoak zure administratzaileari pasa iezaiozu mesedez.",
"More details can be found in the server log." : "Zehaztapen gehiago zerbitzariaren egunerokoan aurki daitezke.",
"Technical details" : "Arazo teknikoak",
"Remote Address: %s" : "Urruneko Helbidea: %s",
@@ -224,7 +234,7 @@ OC.L10N.register(
"Trace" : "Arrastoa",
"Security warning" : "Segurtasun abisua",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Zure zerbitzaria ongi konfiguratzeko informazioa topatzeko <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentazioa begiratu mesedez</a>.",
"Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat",
"Username" : "Erabiltzaile izena",
"Storage & database" : "Biltegia & datubasea",
@@ -238,18 +248,19 @@ OC.L10N.register(
"Database name" : "Datubasearen izena",
"Database tablespace" : "Datu basearen taula-lekua",
"Database host" : "Datubasearen hostalaria",
- "Please specify the port number along with the host name (e.g., localhost:5432)." : "Please specify the port number along with the host name (e.g., localhost:5432).",
- "Performance warning" : "Errendimendua abisua",
- "SQLite will be used as database." : "SQLite will be used as database.",
- "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing the use of SQLite is discouraged.",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Makinaren izenarekin batera portua ezarri (adb. localhost:5432).",
+ "Performance warning" : "Errendimendu abisua",
+ "SQLite will be used as database." : "SQLite datubase bezala erabiliko da.",
+ "For larger installations we recommend to choose a different database backend." : "Instalazio handientzako beste datubase sistema bat erabiltzea gomendatzen da.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Fitxategiak sinkronizatzeko idazmahai aplikazioa erabili nahi badugu SQLite erabiltzea ez da gomendatzen. is discouraged.",
"Finish setup" : "Bukatu konfigurazioa",
"Finishing …" : "Bukatzen...",
"Need help?" : "Laguntza behar al duzu?",
"See the documentation" : "Ikusi dokumentazioa",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikazio honek JavaScript eskatzen du ondo funtzionatzeko. Mesedez {linkstart}JavaScript gaitu {linkend}eta webgunea birkargatu.",
"More apps" : "Aplikazio gehiago",
"Search" : "Bilatu",
+ "Reset search" : "Bilaketa berrezarri",
"Confirm your password" : "Berretsi pasahitza",
"Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!",
"Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.",
@@ -261,6 +272,8 @@ OC.L10N.register(
"Log in" : "Hasi saioa",
"Stay logged in" : "Ez amaitu saioa",
"Alternative Logins" : "Beste erabiltzaile izenak",
+ "Account access" : "Kontuaren sarbidea",
+ "You are about to grant %s access to your %s account." : "%s kontuari %sra sarbidea emango diozu",
"App token" : "Aplikazio-tokena",
"Alternative login using app token" : "Ordezko saio-hasiera aplikazio-tokena erabilta",
"Redirecting …" : "Birbideratzen...",
@@ -272,6 +285,9 @@ OC.L10N.register(
"Cancel log in" : "Ezeztatu log in",
"Use backup code" : "Erabili ordezko kodea",
"Error while validating your second factor" : "Akatsa zure bigarren faktorea balioztatzean",
+ "Access through untrusted domain" : "Ziurtasunik gabeko domeinutik sartzen",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Zure administratzailearekin kontaktuan jarri. Administratzailea bazara, config/config.php fitxategian\"konfidantzazko_domeinuak\" ezarpena editatusample.php konfigurazio fitxategian bezala",
+ "Depending on your configuration, this button could also work to trust the domain:" : "Zure konfigurazioaren arabera, botoi hau domeinua konfidantzazkoa bezala markatzeko balio du",
"Add \"%s\" as trusted domain" : "Gehitu \"%s\" domeinu fidagarri gisa",
"App update required" : "Aplikazio eguneraketa beharrezkoa da",
"%s will be updated to version %s" : "%s %s bertsiora eguneratuko da",
@@ -283,7 +299,9 @@ OC.L10N.register(
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:",
"Detailed logs" : "Log xehea",
"Update needed" : "Eguneratzea beharrezkoa da",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Komando-lerroko eguneratzailea erabili mesedez, 50 erabiltzaile baino gehiagoko instantzia handia bait da",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Laguntza lortzeko, ikusi <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentazioa</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Badakit web bidezko UI-a erabiliz eguneraketa egitean arriskuak daudela, eskaera denboraz-kanpo geratzen bada datuen galera gerta daitekeela, bainabackup kopia egin dut eta badakit instantzia birsortzen, arazoak egonez gero",
"Upgrade via web on my own risk" : "Web bidezko bertsio-berritzea nire ardurapean",
"This %s instance is currently in maintenance mode, which may take a while." : "Instantzia hau %s mantenu-moduan dago, honek denbora tarte bat iraun dezake.",
"This page will refresh itself when the %s instance is available again." : "Orri honek bere burua eguneratuko du %s instantzia berriz prest dagoenean.",
@@ -293,6 +311,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?",
"Ok" : "Ados",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.",
+ "Shared with {recipients}" : "{recipients}-rekin partekatua.",
"Error while unsharing" : "Errore bat egon da elkarbanaketa desegitean",
"can reshare" : "Birparteka daiteke",
"can edit" : "editatu dezake",
@@ -315,7 +334,7 @@ OC.L10N.register(
"Edit tags" : "Editatu etiketak",
"Error loading dialog template: {error}" : "Errorea elkarrizketa txantiloia kargatzean: {errorea}",
"No tags selected for deletion." : "Ez dira ezabatzeko etiketak hautatu.",
- "The update was successful. Redirecting you to Nextcloud now." : "The update was successful. Redirecting you to Nextcloud now.",
+ "The update was successful. Redirecting you to Nextcloud now." : "Eguneraketa ondo joan da. Nextcloud-era birbideratuko zaitugu.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n",
"The share will expire on %s." : "Partekatzea %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
diff --git a/core/l10n/eu.json b/core/l10n/eu.json
index 98a751370ef..11093a5eff3 100644
--- a/core/l10n/eu.json
+++ b/core/l10n/eu.json
@@ -44,12 +44,12 @@
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "%s datu-basearen eskema eguneratu daitekeen egiaztatzen (honek luzerako hartu dezake datu-basearen arabera)",
"Checked database schema update for apps" : "Egiaztatuta aplikazioen datu-basearen zerbitzariaren eguneraketa",
"Updated \"%s\" to %s" : "\"%s\" %s-ra eguneratua",
- "Set log level to debug" : "Set log level to debug",
- "Reset log level" : "Reset log level",
+ "Set log level to debug" : "Log maila debug-era ezarri",
+ "Reset log level" : "Log maila berrezarri",
"Starting code integrity check" : "Kodearen integritate egiaztapena hasten",
"Finished code integrity check" : "Kodearen integritate egiaztapena bukatuta",
- "%s (3rdparty)" : "%s (3rdparty)",
- "%s (incompatible)" : "%s (incompatible)",
+ "%s (3rdparty)" : "%s (hirugarrenekoa)",
+ "%s (incompatible)" : "%s (bateraezina)",
"Following apps have been disabled: %s" : "Hurrengo aplikazioak desgaitu egin dira: %s",
"Already up to date" : "Dagoeneko eguneratuta",
"Search contacts …" : "Bilatu kontaktuak ...",
@@ -59,6 +59,7 @@
"Loading your contacts …" : "Zure kontaktuak kargatzen...",
"Looking for {term} …" : "{term} bilatzen...",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Kodearen integritate egiaztapenarekin arazoak egon dira. Informazio gehiago…</a>",
+ "No action available" : "Ez dago ekintzarik eskuragarri",
"Error fetching contact actions" : "Errorea kontaktu-ekintzak eskuratzean",
"Settings" : "Ezarpenak",
"Connection to server lost" : "Zerbitzariarekiko konexioa eten da",
@@ -82,6 +83,7 @@
"No files in here" : "Ez dago fitxategirik hemen",
"Choose" : "Aukeratu",
"Copy" : "Kopiatu",
+ "Move" : "Mugitu",
"Error loading file picker template: {error}" : "Errorea fitxategi hautatzaile txantiloiak kargatzerakoan: {error}",
"OK" : "Ados",
"Error loading message template: {error}" : "Errorea mezu txantiloia kargatzean: {error}",
@@ -97,6 +99,8 @@
"({count} selected)" : "({count} hautatuta)",
"Error loading file exists template" : "Errorea fitxategia existitzen da txantiloiak kargatzerakoan",
"Pending" : "Zain",
+ "Copy to {folder}" : "{karpetara} kopiatu",
+ "Move to {folder}" : "{karpetara} mugitu",
"Very weak password" : "Pasahitz oso ahula",
"Weak password" : "Pasahitz ahula",
"So-so password" : "Halamoduzko pasahitza",
@@ -104,8 +108,8 @@
"Strong password" : "Pasahitz sendoa",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Zure web zerbitzaria ez dago oraindik konfiguratuta fitxategia sinkronizazioa ahalbidetzeko WebDAV interfazea badirudi hautsita dagoela.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Zure web zerbitzaria ez dago behar bezala konfiguratuta \"{url}\" irekitzeko. Informazio gehiago gure <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentazioan </a> aurki daiteke.",
- "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. We suggest to enable Internet connection for this server if you want to have all features." : "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. We suggest to enable Internet connection for this server if you want to have all features.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
+ "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. We suggest to enable Internet connection for this server if you want to have all features." : "Zerbitzari honek ez du Interneteko konexiorik: Helburu asko ezin dira atzitu.Honek esan nahi du kanpo biltegiratzeak, eguneraketei buruzko notifikazioak edo hirugarrenen aplikazioak ez dutela funtzionatuko. Urruneko fitxategiak atzitzea eta notifikazio emailek ere ez dute funtzionatuko ziuraski. Internet konexioa gaitzea gomendatzen dizugu, ezaugarri guzti hauek nahi badituzu. ",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ez da katxe memoriarik konfiguratu. Funtzionamendua hobetzeko konfigura mesedez configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it.",
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.",
@@ -113,11 +117,11 @@
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
"The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache ez dago era egokian ezarrita. Hobe funtzionatzeko gomendatzen dugu hurrengo ezarpenak erabiltzea php.ini fitxategian:",
"Error occurred while checking server setup" : "Akatsa gertatu da zerbitzariaren konfigurazioa egiaztatzean",
- "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.",
- "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Zure datu karpeta eta zure fitxategiak Internetetik atzigarri daude. .htaccess fitxategia ez dabil. Bereziki gomendatzen da zure web zerbitzariazure datu karpeta atzigarri ez egoteko konfiguratzea, edo datu-karpeta ateratzeaweb zerbitzariaren errotik",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP goiburua ez da \"{expected}\" hau bezalakoa. Segurtasun edo pribatutasuna arazo bat da hau eta ezarpen hau egokitzea gomendatzen dizugu",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Garraio segurtasun-zehatza\" HTTP goiburua ez dago konfiguratua gutxienez \"{seconds}\" segundurekin. Segurtasuna hobetzeko HSTS gaitzea gomendatzen dugu, <a href=\"{docUrl}\" rel=\"noreferrer\">segurtasun aholkuak</a>gida jarraiki.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Elkarbanatuta",
- "Shared with {recipients}" : "{recipients}-rekin partekatua.",
"Error setting expiration date" : "Errore bat egon da muga data ezartzean",
"The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.",
"Set expiration date" : "Ezarri muga data",
@@ -158,13 +162,15 @@
"Could not unshare" : "Ezin izan da despartekatu",
"Error while sharing" : "Errore bat egon da elkarbanatzean",
"Share details could not be loaded for this item." : "Partekatze xehetasunak ezin izan dira elementu honentzat kargatu.",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Autosaketaren funtziorako {count} karaketere gutxienez behar dira","Autosaketaren funtziorako {count} karaketere gutxienez behar dira"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Gerta daiteke zerrenda hau moztu behar izatea - mesedez, zure bilaketa birfindu emaitza gehiago ikusteko",
"No users or groups found for {search}" : "Ez dira {search} -rentzat erabiltzaile edo talderik aurkitu",
"No users found for {search}" : "Ez dira {search} -rentzat erabiltzailerik aurkitu",
"An error occurred. Please try again" : "Errore bat gertatu da. Saiatu berriro.",
- "{sharee} (group)" : "{sharee} (group)",
- "{sharee} (remote)" : "{sharee} (remote)",
+ "{sharee} (group)" : "{sharee} (taldea)",
+ "{sharee} (remote)" : "{sharee} (urrunekoa)",
"{sharee} (email)" : "{sharee} (email)",
- "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {jabea})",
"Share" : "Partekatu",
"Share with other people by entering a user or group, a federated cloud ID or an email address." : "Parteka ezazu jendearekin taldeko erabiltzailea, federatutako hodei baten IDa edo e-posta helbide bat sartuta.",
"Share with other people by entering a user or group or a federated cloud ID." : "Parteka ezazu jendearekin taldeko erabiltzailea edo federatutako hodei baten IDa sartuta.",
@@ -188,6 +194,7 @@
"sunny" : "eguzkitsua",
"Hello {name}, the weather is {weather}" : "Kaixo {name}, eguraldia {weather} da",
"Hello {name}" : "Kaixo {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Hauek dira zure bilaketaren emaitzak:<script>alert(1)</script></strong>",
"new" : "Berria",
"_download %n file_::_download %n files_" : ["%n fitxategia jaitsi","jaitsi %n fitxategiak"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "Eguneratzea abian da, orri hau utziz prozesua eten liteke ingurune batzuetan.",
@@ -197,6 +204,7 @@
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.",
"Continue to Nextcloud" : "Nextcloudera abiatu",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Eguneraketa ongi joan da. %n segundu barru Nextcloud-era birbideratuko zaitugu","Eguneraketa ongi joan da. %n segundu barru Nextcloud-era birbideratuko zaitugu"],
"Searching other places" : "Beste lekuak bilatzen",
"No search results in other folders for {tag}{filter}{endtag}" : "{tag}{filter}{endtag}-rentzat ez da emaitzarik topatu karpetetan",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} bilaketa-emaitza beste karpeta batean","{count} bilaketa-emaitzak beste karpetetan"],
@@ -210,6 +218,8 @@
"The specified document has not been found on the server." : "Zehaztutako dokumentua ez da zerbitzarian aurkitu.",
"You can click here to return to %s." : "Hemen klika dezakezu %sra itzultzeko.",
"Internal Server Error" : "Zerbitzariaren Barne Errorea",
+ "The server was unable to complete your request." : "Zerbitzariak ezin du zure eskaera bete",
+ "If this happens again, please send the technical details below to the server administrator." : "Berriz gertatzen bada, ondoko datu teknikoak zure administratzaileari pasa iezaiozu mesedez.",
"More details can be found in the server log." : "Zehaztapen gehiago zerbitzariaren egunerokoan aurki daitezke.",
"Technical details" : "Arazo teknikoak",
"Remote Address: %s" : "Urruneko Helbidea: %s",
@@ -222,7 +232,7 @@
"Trace" : "Arrastoa",
"Security warning" : "Segurtasun abisua",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.",
- "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Zure zerbitzaria ongi konfiguratzeko informazioa topatzeko <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentazioa begiratu mesedez</a>.",
"Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat",
"Username" : "Erabiltzaile izena",
"Storage & database" : "Biltegia & datubasea",
@@ -236,18 +246,19 @@
"Database name" : "Datubasearen izena",
"Database tablespace" : "Datu basearen taula-lekua",
"Database host" : "Datubasearen hostalaria",
- "Please specify the port number along with the host name (e.g., localhost:5432)." : "Please specify the port number along with the host name (e.g., localhost:5432).",
- "Performance warning" : "Errendimendua abisua",
- "SQLite will be used as database." : "SQLite will be used as database.",
- "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing the use of SQLite is discouraged.",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Makinaren izenarekin batera portua ezarri (adb. localhost:5432).",
+ "Performance warning" : "Errendimendu abisua",
+ "SQLite will be used as database." : "SQLite datubase bezala erabiliko da.",
+ "For larger installations we recommend to choose a different database backend." : "Instalazio handientzako beste datubase sistema bat erabiltzea gomendatzen da.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Fitxategiak sinkronizatzeko idazmahai aplikazioa erabili nahi badugu SQLite erabiltzea ez da gomendatzen. is discouraged.",
"Finish setup" : "Bukatu konfigurazioa",
"Finishing …" : "Bukatzen...",
"Need help?" : "Laguntza behar al duzu?",
"See the documentation" : "Ikusi dokumentazioa",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikazio honek JavaScript eskatzen du ondo funtzionatzeko. Mesedez {linkstart}JavaScript gaitu {linkend}eta webgunea birkargatu.",
"More apps" : "Aplikazio gehiago",
"Search" : "Bilatu",
+ "Reset search" : "Bilaketa berrezarri",
"Confirm your password" : "Berretsi pasahitza",
"Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!",
"Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.",
@@ -259,6 +270,8 @@
"Log in" : "Hasi saioa",
"Stay logged in" : "Ez amaitu saioa",
"Alternative Logins" : "Beste erabiltzaile izenak",
+ "Account access" : "Kontuaren sarbidea",
+ "You are about to grant %s access to your %s account." : "%s kontuari %sra sarbidea emango diozu",
"App token" : "Aplikazio-tokena",
"Alternative login using app token" : "Ordezko saio-hasiera aplikazio-tokena erabilta",
"Redirecting …" : "Birbideratzen...",
@@ -270,6 +283,9 @@
"Cancel log in" : "Ezeztatu log in",
"Use backup code" : "Erabili ordezko kodea",
"Error while validating your second factor" : "Akatsa zure bigarren faktorea balioztatzean",
+ "Access through untrusted domain" : "Ziurtasunik gabeko domeinutik sartzen",
+ "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Zure administratzailearekin kontaktuan jarri. Administratzailea bazara, config/config.php fitxategian\"konfidantzazko_domeinuak\" ezarpena editatusample.php konfigurazio fitxategian bezala",
+ "Depending on your configuration, this button could also work to trust the domain:" : "Zure konfigurazioaren arabera, botoi hau domeinua konfidantzazkoa bezala markatzeko balio du",
"Add \"%s\" as trusted domain" : "Gehitu \"%s\" domeinu fidagarri gisa",
"App update required" : "Aplikazio eguneraketa beharrezkoa da",
"%s will be updated to version %s" : "%s %s bertsiora eguneratuko da",
@@ -281,7 +297,9 @@
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:",
"Detailed logs" : "Log xehea",
"Update needed" : "Eguneratzea beharrezkoa da",
+ "Please use the command line updater because you have a big instance with more than 50 users." : "Komando-lerroko eguneratzailea erabili mesedez, 50 erabiltzaile baino gehiagoko instantzia handia bait da",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Laguntza lortzeko, ikusi <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentazioa</a>.",
+ "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Badakit web bidezko UI-a erabiliz eguneraketa egitean arriskuak daudela, eskaera denboraz-kanpo geratzen bada datuen galera gerta daitekeela, bainabackup kopia egin dut eta badakit instantzia birsortzen, arazoak egonez gero",
"Upgrade via web on my own risk" : "Web bidezko bertsio-berritzea nire ardurapean",
"This %s instance is currently in maintenance mode, which may take a while." : "Instantzia hau %s mantenu-moduan dago, honek denbora tarte bat iraun dezake.",
"This page will refresh itself when the %s instance is available again." : "Orri honek bere burua eguneratuko du %s instantzia berriz prest dagoenean.",
@@ -291,6 +309,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?",
"Ok" : "Ados",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.",
+ "Shared with {recipients}" : "{recipients}-rekin partekatua.",
"Error while unsharing" : "Errore bat egon da elkarbanaketa desegitean",
"can reshare" : "Birparteka daiteke",
"can edit" : "editatu dezake",
@@ -313,7 +332,7 @@
"Edit tags" : "Editatu etiketak",
"Error loading dialog template: {error}" : "Errorea elkarrizketa txantiloia kargatzean: {errorea}",
"No tags selected for deletion." : "Ez dira ezabatzeko etiketak hautatu.",
- "The update was successful. Redirecting you to Nextcloud now." : "The update was successful. Redirecting you to Nextcloud now.",
+ "The update was successful. Redirecting you to Nextcloud now." : "Eguneraketa ondo joan da. Nextcloud-era birbideratuko zaitugu.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n",
"The share will expire on %s." : "Partekatzea %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
diff --git a/core/l10n/fa.js b/core/l10n/fa.js
index 68f3a240fe5..099de8b7fcd 100644
--- a/core/l10n/fa.js
+++ b/core/l10n/fa.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "اشتراک گذاشته شده",
- "Shared with {recipients}" : "به اشتراک گذاشته شده با {recipients}",
"Error setting expiration date" : "خطا در تنظیم تاریخ انقضا",
"The public link will expire no later than {days} days after it is created" : "لینک عمومی پس از {days} روز پس از ایجاد منقضی خواهد شد",
"Set expiration date" : "تنظیم تاریخ انقضا",
@@ -289,6 +288,7 @@ OC.L10N.register(
"Thank you for your patience." : "از صبر شما متشکریم",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
"Ok" : "قبول",
+ "Shared with {recipients}" : "به اشتراک گذاشته شده با {recipients}",
"Error while unsharing" : "خطا درحال لغو اشتراک",
"can reshare" : "می توان مجددا به اشتراک گذاشت",
"can edit" : "می توان ویرایش کرد",
diff --git a/core/l10n/fa.json b/core/l10n/fa.json
index e2d767db377..dc82fd91ddd 100644
--- a/core/l10n/fa.json
+++ b/core/l10n/fa.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "اشتراک گذاشته شده",
- "Shared with {recipients}" : "به اشتراک گذاشته شده با {recipients}",
"Error setting expiration date" : "خطا در تنظیم تاریخ انقضا",
"The public link will expire no later than {days} days after it is created" : "لینک عمومی پس از {days} روز پس از ایجاد منقضی خواهد شد",
"Set expiration date" : "تنظیم تاریخ انقضا",
@@ -287,6 +286,7 @@
"Thank you for your patience." : "از صبر شما متشکریم",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "فایل های شما رمزگذاری شده اند. اگر شما کلید بازیابی را فعال نکرده اید، پس از راه اندازی مجدد رمزعبور هیچ راهی برای بازگشت اطلاعاتتان وجود نخواهد داشت.در صورت عدم اطمینان به انجام کار، لطفا ابتدا با مدیر خود تماس بگیرید. آیا واقعا میخواهید ادامه دهید ؟",
"Ok" : "قبول",
+ "Shared with {recipients}" : "به اشتراک گذاشته شده با {recipients}",
"Error while unsharing" : "خطا درحال لغو اشتراک",
"can reshare" : "می توان مجددا به اشتراک گذاشت",
"can edit" : "می توان ویرایش کرد",
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
index 81ad99d806f..9ec8b545255 100644
--- a/core/l10n/fi.js
+++ b/core/l10n/fi.js
@@ -122,7 +122,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritelty vähintään \"{seconds}\" sekuntiin. Paremman tietoturvan vuoksi suosittelemme määrittelemään HSTS:n, kuten <a href=\"{docUrl}\" rel=\"noreferrer\">tietoturvavinkeissämme</a> neuvotaan.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Käytät sivustoa HTTP-yhteydellä. Suosittelemme asettamaan palvelimen vaatimaan HTTPS-yhteyden, kuten <a href=\"{docUrl}\">tietoturvavinkeissämme</a> neuvotaan.",
"Shared" : "Jaettu",
- "Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa",
"Error setting expiration date" : "Virhe vanhenemispäivää asetettaessa",
"The public link will expire no later than {days} days after it is created" : "Julkinen linkki vanhenee {days} päivän jälkeen sen luomisesta",
"Set expiration date" : "Aseta vanhenemispäivä",
@@ -305,6 +304,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Data-hakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan Internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään HTTP-palvelimen asetukset siten, ettei data-hakemisto ole suoraan käytettävissä Internetistä tai siirtämään data-hakemiston HTTP-palvelimen juurihakemiston ulkopuolelle.",
+ "Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa",
"Error while unsharing" : "Virhe jakoa peruttaessa",
"can reshare" : "voi uudelleenjakaa",
"can edit" : "voi muokata",
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
index 03b20c9dc19..8840b6e8c9a 100644
--- a/core/l10n/fi.json
+++ b/core/l10n/fi.json
@@ -120,7 +120,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritelty vähintään \"{seconds}\" sekuntiin. Paremman tietoturvan vuoksi suosittelemme määrittelemään HSTS:n, kuten <a href=\"{docUrl}\" rel=\"noreferrer\">tietoturvavinkeissämme</a> neuvotaan.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Käytät sivustoa HTTP-yhteydellä. Suosittelemme asettamaan palvelimen vaatimaan HTTPS-yhteyden, kuten <a href=\"{docUrl}\">tietoturvavinkeissämme</a> neuvotaan.",
"Shared" : "Jaettu",
- "Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa",
"Error setting expiration date" : "Virhe vanhenemispäivää asetettaessa",
"The public link will expire no later than {days} days after it is created" : "Julkinen linkki vanhenee {days} päivän jälkeen sen luomisesta",
"Set expiration date" : "Aseta vanhenemispäivä",
@@ -303,6 +302,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Tiedostosi on salattu. Jos et ole ottanut käyttöön palautusavainta, tietojasi ei ole mahdollista palauttaa salasanan nollaamisen jälkeen.<br />Jos et ole varma mitä tehdä, ota yhteys ylläpitäjään.<br />Haluatko varmasti jatkaa?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Data-hakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan Internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään HTTP-palvelimen asetukset siten, ettei data-hakemisto ole suoraan käytettävissä Internetistä tai siirtämään data-hakemiston HTTP-palvelimen juurihakemiston ulkopuolelle.",
+ "Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa",
"Error while unsharing" : "Virhe jakoa peruttaessa",
"can reshare" : "voi uudelleenjakaa",
"can edit" : "voi muokata",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index e69f4ee43fc..d7201277c25 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à au moins \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans nos <a href=\"{docUrl}\" rel=\"noreferrer\">conseils de sécurisation</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans nos <a href=\"{docUrl}\">conseils de sécurisation</a>.",
"Shared" : "Partagé",
- "Shared with {recipients}" : "Partagé avec {recipients}",
"Error setting expiration date" : "Erreur lors de la configuration de la date d'expiration",
"The public link will expire no later than {days} days after it is created" : "Ce lien public expirera dans {days} jours après sa création.",
"Set expiration date" : "Spécifier une date d'expiration",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Identifiants alternatifs",
"Account access" : "Accès au compte",
"You are about to grant %s access to your %s account." : "Vous êtes sur le point d'accorder à \"%s\" l'accès à votre compte \"%s\".",
+ "Grant access" : "Autoriser l'accès",
"App token" : "Jeton d'application",
"Alternative login using app token" : "Authentification alternative utilisant un jeton d'application",
"Redirecting …" : "Redirection en cours...",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.",
+ "Shared with {recipients}" : "Partagé avec {recipients}",
"Error while unsharing" : "Erreur lors de l'annulation du partage",
"can reshare" : "peut repartager",
"can edit" : "peut modifier",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 36598c26d99..b4da3c2da5b 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à au moins \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans nos <a href=\"{docUrl}\" rel=\"noreferrer\">conseils de sécurisation</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans nos <a href=\"{docUrl}\">conseils de sécurisation</a>.",
"Shared" : "Partagé",
- "Shared with {recipients}" : "Partagé avec {recipients}",
"Error setting expiration date" : "Erreur lors de la configuration de la date d'expiration",
"The public link will expire no later than {days} days after it is created" : "Ce lien public expirera dans {days} jours après sa création.",
"Set expiration date" : "Spécifier une date d'expiration",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Identifiants alternatifs",
"Account access" : "Accès au compte",
"You are about to grant %s access to your %s account." : "Vous êtes sur le point d'accorder à \"%s\" l'accès à votre compte \"%s\".",
+ "Grant access" : "Autoriser l'accès",
"App token" : "Jeton d'application",
"Alternative login using app token" : "Authentification alternative utilisant un jeton d'application",
"Redirecting …" : "Redirection en cours...",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clé de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.",
+ "Shared with {recipients}" : "Partagé avec {recipients}",
"Error while unsharing" : "Erreur lors de l'annulation du partage",
"can reshare" : "peut repartager",
"can edit" : "peut modifier",
diff --git a/core/l10n/hu.js b/core/l10n/hu.js
index 3af920be339..10012070b1b 100644
--- a/core/l10n/hu.js
+++ b/core/l10n/hu.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezze a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\" rel=\"noreferrer\">biztonsági tippek</a> dokumentációban.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Jelenleg HTTP-vel éri el a weboldalt. Erősen ajánlott a HTTPS konfiguráció használata ehelyett, ahogyan ezt részleteztük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban",
"Shared" : "Megosztott",
- "Shared with {recipients}" : "Megosztva ővelük: {recipients}",
"Error setting expiration date" : "Nem sikerült a lejárati időt beállítani",
"The public link will expire no later than {days} days after it is created" : "A nyilvános hivatkozás érvényessége legkorábban {days} nappal a létrehozása után jár csak le",
"Set expiration date" : "Legyen lejárati idő",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Az adat könyvtár és a fájlok valószínűleg elérhetőek az internetről, mert a .htaccess fájl nem működik. Erősen ajánlott, hogy úgy állítsd be a webszervert, hogy az adatkönyvtár ne legyen elérhető az internetről, vagy helyezd át az adatokat a webszerver gyökérkönyvtárából.",
+ "Shared with {recipients}" : "Megosztva ővelük: {recipients}",
"Error while unsharing" : "Nem sikerült visszavonni a megosztást",
"can reshare" : "újra megoszthatja",
"can edit" : "szerkesztheti",
diff --git a/core/l10n/hu.json b/core/l10n/hu.json
index 70ac7fb3731..ac1cb18027b 100644
--- a/core/l10n/hu.json
+++ b/core/l10n/hu.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezze a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\" rel=\"noreferrer\">biztonsági tippek</a> dokumentációban.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Jelenleg HTTP-vel éri el a weboldalt. Erősen ajánlott a HTTPS konfiguráció használata ehelyett, ahogyan ezt részleteztük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban",
"Shared" : "Megosztott",
- "Shared with {recipients}" : "Megosztva ővelük: {recipients}",
"Error setting expiration date" : "Nem sikerült a lejárati időt beállítani",
"The public link will expire no later than {days} days after it is created" : "A nyilvános hivatkozás érvényessége legkorábban {days} nappal a létrehozása után jár csak le",
"Set expiration date" : "Legyen lejárati idő",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Az Ön fájljai titkosítva vannak. Ha nem engedélyezte korábban az adatok visszanyeréséhez szükséges kulcs használatát, akkor a jelszó megváltoztatását követően nem fog hozzáférni az adataihoz. Ha nem biztos abban, hogy mit kellene tennie, akkor kérdezze meg a rendszergazdát, mielőtt továbbmenne.<br />Biztos, hogy folytatni kívánja?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Az adat könyvtár és a fájlok valószínűleg elérhetőek az internetről, mert a .htaccess fájl nem működik. Erősen ajánlott, hogy úgy állítsd be a webszervert, hogy az adatkönyvtár ne legyen elérhető az internetről, vagy helyezd át az adatokat a webszerver gyökérkönyvtárából.",
+ "Shared with {recipients}" : "Megosztva ővelük: {recipients}",
"Error while unsharing" : "Nem sikerült visszavonni a megosztást",
"can reshare" : "újra megoszthatja",
"can edit" : "szerkesztheti",
diff --git a/core/l10n/id.js b/core/l10n/id.js
index 12390cfa540..61e8fd340f1 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -101,7 +101,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\" rel=\"noreferrer\">saran keamanan</a> kami.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Anda mengakses situs ini via HTTP. Kami sangat menyarankan Anda untuk mengatur server Anda menggunakan HTTPS yang dibahas di <a href=\"{docUrl}\">tips keamanan</a> kami.",
"Shared" : "Dibagikan",
- "Shared with {recipients}" : "Dibagikan dengan {recipients}",
"Error setting expiration date" : "Kesalahan saat mengatur tanggal kedaluwarsa",
"The public link will expire no later than {days} days after it is created" : "Tautan publik akan kadaluarsa tidak lebih dari {days} hari setelah ini dibuat",
"Set expiration date" : "Atur tanggal kedaluwarsa",
@@ -252,6 +251,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"Ok" : "Oke",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.",
+ "Shared with {recipients}" : "Dibagikan dengan {recipients}",
"Error while unsharing" : "Kesalahan saat membatalkan pembagian",
"can reshare" : "dapat dibagi ulang",
"can edit" : "dapat sunting",
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 5bc146a88e3..c2965aa7b38 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -99,7 +99,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\" rel=\"noreferrer\">saran keamanan</a> kami.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Anda mengakses situs ini via HTTP. Kami sangat menyarankan Anda untuk mengatur server Anda menggunakan HTTPS yang dibahas di <a href=\"{docUrl}\">tips keamanan</a> kami.",
"Shared" : "Dibagikan",
- "Shared with {recipients}" : "Dibagikan dengan {recipients}",
"Error setting expiration date" : "Kesalahan saat mengatur tanggal kedaluwarsa",
"The public link will expire no later than {days} days after it is created" : "Tautan publik akan kadaluarsa tidak lebih dari {days} hari setelah ini dibuat",
"Set expiration date" : "Atur tanggal kedaluwarsa",
@@ -250,6 +249,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Berkas-berkas Anda terenkripsi. Jika Anda tidak mengaktifkan kunci pemulihan, tidak ada cara lain untuk mendapatkan data Anda kembali setelah sandi di setel ulang.<br />Jika Anda tidak yakin dengan apa yang akan Anda dilakukan, mohon hubungi administrator Anda sebelum melanjutkan. <br />Apakah Anda yakin ingin melanjutkan?",
"Ok" : "Oke",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.",
+ "Shared with {recipients}" : "Dibagikan dengan {recipients}",
"Error while unsharing" : "Kesalahan saat membatalkan pembagian",
"can reshare" : "dapat dibagi ulang",
"can edit" : "dapat sunting",
diff --git a/core/l10n/is.js b/core/l10n/is.js
index 017d845cab9..61ca6b02bd4 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\" rel=\"noreferrer\">öryggisleiðbeiningum</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum</a> okkar.",
"Shared" : "Deilt",
- "Shared with {recipients}" : "Deilt með {recipients}",
"Error setting expiration date" : "Villa við að setja gildistíma",
"The public link will expire no later than {days} days after it is created" : "Almenningstengillinn rennur út eigi síðar en {days} dögum eftir að hann er útbúinn",
"Set expiration date" : "Setja gildistíma",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"Ok" : "Í lagi",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Gagnamappan og skrárnar þínar eru líklega aðgengilegar öllum af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjóninn þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir skjalarót vefþjóns.",
+ "Shared with {recipients}" : "Deilt með {recipients}",
"Error while unsharing" : "Villa við að hætta deilingu",
"can reshare" : "getur endurdeilt",
"can edit" : "getur breytt",
diff --git a/core/l10n/is.json b/core/l10n/is.json
index b16de4adedd..7ef385728ad 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\" rel=\"noreferrer\">öryggisleiðbeiningum</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum</a> okkar.",
"Shared" : "Deilt",
- "Shared with {recipients}" : "Deilt með {recipients}",
"Error setting expiration date" : "Villa við að setja gildistíma",
"The public link will expire no later than {days} days after it is created" : "Almenningstengillinn rennur út eigi síðar en {days} dögum eftir að hann er útbúinn",
"Set expiration date" : "Setja gildistíma",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Skrárnar þínar eru dulritaðar. Ef þú hefur ekki virkjað endurheimtingarlykilinn, þá verður engin leið til að fá gögnin þín til baka eftir lykilorðið þitt er endurstillt.<br />Ef þú ert ekki viss hvað eigi að gera, skaltu hafa samband við kerfisstjórann áður en þú heldur áfram. <br />Viltu halda áfram?",
"Ok" : "Í lagi",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Gagnamappan og skrárnar þínar eru líklega aðgengilegar öllum af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjóninn þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir skjalarót vefþjóns.",
+ "Shared with {recipients}" : "Deilt með {recipients}",
"Error while unsharing" : "Villa við að hætta deilingu",
"can reshare" : "getur endurdeilt",
"can edit" : "getur breytt",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 6092e2ee002..638c0415369 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore di almeno \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\" rel=\"noreferrer\">consigli sulla sicurezza</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS, come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
"Shared" : "Condiviso",
- "Shared with {recipients}" : "Condiviso con {recipients}",
"Error setting expiration date" : "Errore durante l'impostazione della data di scadenza",
"The public link will expire no later than {days} days after it is created" : "Il collegamento pubblico scadrà non più tardi di {days} giorni dopo la sua creazione",
"Set expiration date" : "Imposta data di scadenza",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Accessi alternativi",
"Account access" : "Accesso account",
"You are about to grant %s access to your %s account." : "Stai per accordare a \"%s\" l'accesso al tuo account %s.",
+ "Grant access" : "Accorda accesso",
"App token" : "Token applicazione",
"Alternative login using app token" : "Accesso alternativo utilizzando il token dell'applicazione",
"Redirecting …" : "Redirezione in corso...",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.",
+ "Shared with {recipients}" : "Condiviso con {recipients}",
"Error while unsharing" : "Errore durante la rimozione della condivisione",
"can reshare" : "può ri-condividere",
"can edit" : "può modificare",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index a0d644e02e7..d9e13359da0 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore di almeno \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\" rel=\"noreferrer\">consigli sulla sicurezza</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS, come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.",
"Shared" : "Condiviso",
- "Shared with {recipients}" : "Condiviso con {recipients}",
"Error setting expiration date" : "Errore durante l'impostazione della data di scadenza",
"The public link will expire no later than {days} days after it is created" : "Il collegamento pubblico scadrà non più tardi di {days} giorni dopo la sua creazione",
"Set expiration date" : "Imposta data di scadenza",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Accessi alternativi",
"Account access" : "Accesso account",
"You are about to grant %s access to your %s account." : "Stai per accordare a \"%s\" l'accesso al tuo account %s.",
+ "Grant access" : "Accorda accesso",
"App token" : "Token applicazione",
"Alternative login using app token" : "Accesso alternativo utilizzando il token dell'applicazione",
"Redirecting …" : "Redirezione in corso...",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "I tuoi file sono cifrati. Se non hai precedentemente abilitato la chiave di ripristino, non sarà più possibile ritrovare i tuoi dati una volta che la password sarà reimpostata.<br />Se non sei sicuro, contatta l'amministratore prima di proseguire.<br />Vuoi davvero continuare?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.",
+ "Shared with {recipients}" : "Condiviso con {recipients}",
"Error while unsharing" : "Errore durante la rimozione della condivisione",
"can reshare" : "può ri-condividere",
"can edit" : "può modificare",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index df117b879e7..b1a1d5298b2 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP ヘッダ の \"Strict-Transport-Security\" が少なくとも \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、<a href=\"{docUrl}\" rel=\"noreferrer\">セキュリティTips</a>を参照して、HSTS を有効にすることをおすすめします。",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP経由でアクセスしています。<a href=\"{docUrl}\">security tips</a>を参照して、代わりにHTTPSを使用するようサーバーを設定することを強くおすすめします。 instead as described in our .",
"Shared" : "共有中",
- "Shared with {recipients}" : "{recipients} と共有",
"Error setting expiration date" : "有効期限の設定でエラー発生",
"The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります",
"Set expiration date" : "有効期限を設定",
@@ -307,6 +306,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。",
+ "Shared with {recipients}" : "{recipients} と共有",
"Error while unsharing" : "共有解除でエラー発生",
"can reshare" : "再共有可能",
"can edit" : "編集を許可",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 4d7074d0dac..cd841fe9263 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP ヘッダ の \"Strict-Transport-Security\" が少なくとも \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、<a href=\"{docUrl}\" rel=\"noreferrer\">セキュリティTips</a>を参照して、HSTS を有効にすることをおすすめします。",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP経由でアクセスしています。<a href=\"{docUrl}\">security tips</a>を参照して、代わりにHTTPSを使用するようサーバーを設定することを強くおすすめします。 instead as described in our .",
"Shared" : "共有中",
- "Shared with {recipients}" : "{recipients} と共有",
"Error setting expiration date" : "有効期限の設定でエラー発生",
"The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります",
"Set expiration date" : "有効期限を設定",
@@ -305,6 +304,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。",
+ "Shared with {recipients}" : "{recipients} と共有",
"Error while unsharing" : "共有解除でエラー発生",
"can reshare" : "再共有可能",
"can edit" : "編集を許可",
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index 060163fb20b..1f981c9e2e6 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -121,7 +121,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP 헤더가 \"{seconds}\"초 이상로 설정되어 있지 않습니다. <a href=\"{docUrl}\" rel=\"noreferrer\">보안 팁</a>에서 제안하는 것처럼 HSTS를 활성화하는 것을 추천합니다.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "이 사이트를 HTTP로 접근하고 있습니다. <a href=\"{docUrl}\">보안 팁</a>에 나타난 것처럼 서버 설정을 변경하여 HTTPS를 사용하는 것을 강력히 추천합니다.",
"Shared" : "공유됨",
- "Shared with {recipients}" : "{recipients} 님과 공유됨",
"Error setting expiration date" : "만료 날짜 설정 오류",
"The public link will expire no later than {days} days after it is created" : "공개 링크를 만든 후 최대 {days}일까지 유지됩니다",
"Set expiration date" : "만료 날짜 설정",
@@ -296,6 +295,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "내 파일이 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다.<br />무엇을 해야 할 지 잘 모르겠으면 계속하기 전에 관리자에게 연락하십시오.<br />그래도 계속 진행하시겠습니까?",
"Ok" : "확인",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.",
+ "Shared with {recipients}" : "{recipients} 님과 공유됨",
"Error while unsharing" : "공유 해제하는 중 오류 발생",
"can reshare" : "재공유 가능",
"can edit" : "편집 가능",
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index b307d2019bc..657021827e8 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -119,7 +119,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP 헤더가 \"{seconds}\"초 이상로 설정되어 있지 않습니다. <a href=\"{docUrl}\" rel=\"noreferrer\">보안 팁</a>에서 제안하는 것처럼 HSTS를 활성화하는 것을 추천합니다.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "이 사이트를 HTTP로 접근하고 있습니다. <a href=\"{docUrl}\">보안 팁</a>에 나타난 것처럼 서버 설정을 변경하여 HTTPS를 사용하는 것을 강력히 추천합니다.",
"Shared" : "공유됨",
- "Shared with {recipients}" : "{recipients} 님과 공유됨",
"Error setting expiration date" : "만료 날짜 설정 오류",
"The public link will expire no later than {days} days after it is created" : "공개 링크를 만든 후 최대 {days}일까지 유지됩니다",
"Set expiration date" : "만료 날짜 설정",
@@ -294,6 +293,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "내 파일이 암호화되어 있습니다. 복구 키를 활성화하지 않았다면 암호를 초기화한 후 데이터를 복구할 수 없습니다.<br />무엇을 해야 할 지 잘 모르겠으면 계속하기 전에 관리자에게 연락하십시오.<br />그래도 계속 진행하시겠습니까?",
"Ok" : "확인",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.",
+ "Shared with {recipients}" : "{recipients} 님과 공유됨",
"Error while unsharing" : "공유 해제하는 중 오류 발생",
"can reshare" : "재공유 가능",
"can edit" : "편집 가능",
diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js
index 1cbef8d0deb..c2669ebfdf4 100644
--- a/core/l10n/lt_LT.js
+++ b/core/l10n/lt_LT.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP antraštė turi būti nustatyta į bent \"{seconds}\" sekundes (-ių). Tam, kad saugumas būtų sustiprintas, rekomenduojame nustatyti HSTS palaikymą taip, kaip aprašyta <a href=\"{docUrl}\" rel=\"noreferrer\">saugumo patarimuose</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Jūs bandote prieiti šį interneto puslapį per HTTP protokolą. Mes siūlome jūsų tinklo kompiuteryje palaikyti tik HTTPS protokolą, kaip yra apibūdinta mūsų <a href=\"{docUrl}\">saugumo patarimuose</a>.",
"Shared" : "Dalinamasi",
- "Shared with {recipients}" : "Dalinamasi su {recipients}",
"Error setting expiration date" : "Klaida nustatant dalinimosi pabaigos laiką",
"The public link will expire no later than {days} days after it is created" : "Nuoroda veiks ne mažiau kaip {days} dienas nuo sukūrimo",
"Set expiration date" : "Nustatykite veikimo pabaigos datą",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Jūsų duomenys yra šifruoti. Jei neturite atstatymo rakto, duomenų naudojimas bus nebeįmanomas po slaptažodžio atstatymo. <br />Jei nesate tikras dėl to, ką norite padaryti, susisiekite su sistemos administratoriumi. <br />Ar norite tęsti?",
"Ok" : "Gerai",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Jūsų duomenys gali būti laisvai prieinami per internetą. Nustatymų byla \".htaccess\" neveikia. Primygtinai reikalaujame tinklo kompiuterį sukonfigūruoti taip, kad duomenys nebūtų laisvai prieinami per internetą, iškelti sistemos duomenų aplanką iš sistemos įdiegimo aplanko.",
+ "Shared with {recipients}" : "Dalinamasi su {recipients}",
"Error while unsharing" : "Klaida, kai atšaukiamas dalijimasis",
"can reshare" : "gali pakartotinai dalintis",
"can edit" : "gali redaguoti",
diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json
index 4939db69ab0..3c098e4599d 100644
--- a/core/l10n/lt_LT.json
+++ b/core/l10n/lt_LT.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP antraštė turi būti nustatyta į bent \"{seconds}\" sekundes (-ių). Tam, kad saugumas būtų sustiprintas, rekomenduojame nustatyti HSTS palaikymą taip, kaip aprašyta <a href=\"{docUrl}\" rel=\"noreferrer\">saugumo patarimuose</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Jūs bandote prieiti šį interneto puslapį per HTTP protokolą. Mes siūlome jūsų tinklo kompiuteryje palaikyti tik HTTPS protokolą, kaip yra apibūdinta mūsų <a href=\"{docUrl}\">saugumo patarimuose</a>.",
"Shared" : "Dalinamasi",
- "Shared with {recipients}" : "Dalinamasi su {recipients}",
"Error setting expiration date" : "Klaida nustatant dalinimosi pabaigos laiką",
"The public link will expire no later than {days} days after it is created" : "Nuoroda veiks ne mažiau kaip {days} dienas nuo sukūrimo",
"Set expiration date" : "Nustatykite veikimo pabaigos datą",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Jūsų duomenys yra šifruoti. Jei neturite atstatymo rakto, duomenų naudojimas bus nebeįmanomas po slaptažodžio atstatymo. <br />Jei nesate tikras dėl to, ką norite padaryti, susisiekite su sistemos administratoriumi. <br />Ar norite tęsti?",
"Ok" : "Gerai",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Jūsų duomenys gali būti laisvai prieinami per internetą. Nustatymų byla \".htaccess\" neveikia. Primygtinai reikalaujame tinklo kompiuterį sukonfigūruoti taip, kad duomenys nebūtų laisvai prieinami per internetą, iškelti sistemos duomenų aplanką iš sistemos įdiegimo aplanko.",
+ "Shared with {recipients}" : "Dalinamasi su {recipients}",
"Error while unsharing" : "Klaida, kai atšaukiamas dalijimasis",
"can reshare" : "gali pakartotinai dalintis",
"can edit" : "gali redaguoti",
diff --git a/core/l10n/lv.js b/core/l10n/lv.js
index cb7030fbfee..d1ffedcfe83 100644
--- a/core/l10n/lv.js
+++ b/core/l10n/lv.js
@@ -107,7 +107,6 @@ OC.L10N.register(
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Jūsu serveris nav pareizi uzstādīts lai atļautu failu sinhronizēšanu jo WebDAV interfeiss šķiet salūzis.",
"Error occurred while checking server setup" : "Radās kļūda, pārbaudot servera ",
"Shared" : "Koplietots",
- "Shared with {recipients}" : "Koplietots ar {recipients}",
"Error setting expiration date" : "Kļūda, iestatot termiņa datumu",
"Set expiration date" : "Iestatiet termiņa datumu",
"Expiration" : "Termiņš",
@@ -278,6 +277,7 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja neesat iespējojis atkopšanas atslēgu, nevarēsiet atgūt datus atpakaļ, pēc jūsu paroles atiestatīšanas.<br />Ja neesat pārliecināts par to, ko darīt, lūdzu, pirms turpināt, sazinieties ar administratoru. <br />Vai tiešām vēlaties turpināt?",
"Ok" : "Labi",
+ "Shared with {recipients}" : "Koplietots ar {recipients}",
"Error while unsharing" : "Kļūda, beidzot dalīties",
"can reshare" : "var atkārtoti kopīgot",
"can edit" : "var rediģēt",
diff --git a/core/l10n/lv.json b/core/l10n/lv.json
index 51029eb326d..ad144d37749 100644
--- a/core/l10n/lv.json
+++ b/core/l10n/lv.json
@@ -105,7 +105,6 @@
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Jūsu serveris nav pareizi uzstādīts lai atļautu failu sinhronizēšanu jo WebDAV interfeiss šķiet salūzis.",
"Error occurred while checking server setup" : "Radās kļūda, pārbaudot servera ",
"Shared" : "Koplietots",
- "Shared with {recipients}" : "Koplietots ar {recipients}",
"Error setting expiration date" : "Kļūda, iestatot termiņa datumu",
"Set expiration date" : "Iestatiet termiņa datumu",
"Expiration" : "Termiņš",
@@ -276,6 +275,7 @@
"Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja neesat iespējojis atkopšanas atslēgu, nevarēsiet atgūt datus atpakaļ, pēc jūsu paroles atiestatīšanas.<br />Ja neesat pārliecināts par to, ko darīt, lūdzu, pirms turpināt, sazinieties ar administratoru. <br />Vai tiešām vēlaties turpināt?",
"Ok" : "Labi",
+ "Shared with {recipients}" : "Koplietots ar {recipients}",
"Error while unsharing" : "Kļūda, beidzot dalīties",
"can reshare" : "var atkārtoti kopīgot",
"can edit" : "var rediģēt",
diff --git a/core/l10n/nb.js b/core/l10n/nb.js
index 1fd3db2c831..7943237aa15 100644
--- a/core/l10n/nb.js
+++ b/core/l10n/nb.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\"- (Streng transportsikkerhet) HTTP-hodet er ikke satt opp til minst \"{seconds}\" sekunder. For forbedret sikkerhet anbefales det å skru på HSTS som beskrevet i våre <a href=\"{docUrl}\" rel=\"noreferrer\">sikkerhetstips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du besøker denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
"Shared" : "Delt",
- "Shared with {recipients}" : "Delt med {recipients}",
"Error setting expiration date" : "Kan ikke sette utløpsdato",
"The public link will expire no later than {days} days after it is created" : "Den offentlige lenken vil utløpe senest {days} dager etter at den lages",
"Set expiration date" : "Sett utløpsdato",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan nås eller at du flytter datamappen ut av vev-tjenerens dokumentrot.",
+ "Shared with {recipients}" : "Delt med {recipients}",
"Error while unsharing" : "Feil ved oppheving av deling",
"can reshare" : "kan dele videre",
"can edit" : "kan redigere",
diff --git a/core/l10n/nb.json b/core/l10n/nb.json
index f230345cfa4..3843d57b607 100644
--- a/core/l10n/nb.json
+++ b/core/l10n/nb.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\"- (Streng transportsikkerhet) HTTP-hodet er ikke satt opp til minst \"{seconds}\" sekunder. For forbedret sikkerhet anbefales det å skru på HSTS som beskrevet i våre <a href=\"{docUrl}\" rel=\"noreferrer\">sikkerhetstips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du besøker denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
"Shared" : "Delt",
- "Shared with {recipients}" : "Delt med {recipients}",
"Error setting expiration date" : "Kan ikke sette utløpsdato",
"The public link will expire no later than {days} days after it is created" : "Den offentlige lenken vil utløpe senest {days} dager etter at den lages",
"Set expiration date" : "Sett utløpsdato",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Filene dine er kryptert. Hvis du ikke har aktivert gjenopprettingsnøkkelen, vil det være helt umulig å få tilbake dataene dine etter at pasordet ditt er tilbakestilt.<br />Hvis du er usikker på hva du skal gjøre, kontakt administratoren din før du fortsetter. <br />Vil du virkelig fortsette?",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan nås eller at du flytter datamappen ut av vev-tjenerens dokumentrot.",
+ "Shared with {recipients}" : "Delt med {recipients}",
"Error while unsharing" : "Feil ved oppheving av deling",
"can reshare" : "kan dele videre",
"can edit" : "kan redigere",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 8af41991283..e2a084664ee 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd met minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze<a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Je bent met deze site verbonden over HTTP. We adviseren je dringend om je server zo te configureren dat HTTPS wordt vereist, zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Gedeeld",
- "Shared with {recipients}" : "Gedeeld met {recipients}",
"Error setting expiration date" : "Fout tijdens het instellen van de vervaldatum",
"The public link will expire no later than {days} days after it is created" : "De openbare link vervalt niet eerder dan {days} dagen na het aanmaken",
"Set expiration date" : "Stel vervaldatum in",
@@ -262,6 +261,7 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.",
"More apps" : "Meer apps",
"Search" : "Zoeken",
+ "Reset search" : "Zoekopdracht wissen",
"Confirm your password" : "Bevestig je wachtwoord",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
"Please contact your administrator." : "Neem contact op met je systeembeheerder.",
@@ -312,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt ingeschakeld, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Je data folder en je bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om je webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om je datadirectory te verplaatsen naar een locatie buiten de document-root van de webserver.",
+ "Shared with {recipients}" : "Gedeeld met {recipients}",
"Error while unsharing" : "Fout tijdens het stoppen met delen",
"can reshare" : "kan doordelen",
"can edit" : "kan wijzigen",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index dcc7e8722a8..fc1be0e1de9 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd met minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze<a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Je bent met deze site verbonden over HTTP. We adviseren je dringend om je server zo te configureren dat HTTPS wordt vereist, zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Gedeeld",
- "Shared with {recipients}" : "Gedeeld met {recipients}",
"Error setting expiration date" : "Fout tijdens het instellen van de vervaldatum",
"The public link will expire no later than {days} days after it is created" : "De openbare link vervalt niet eerder dan {days} dagen na het aanmaken",
"Set expiration date" : "Stel vervaldatum in",
@@ -260,6 +259,7 @@
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.",
"More apps" : "Meer apps",
"Search" : "Zoeken",
+ "Reset search" : "Zoekopdracht wissen",
"Confirm your password" : "Bevestig je wachtwoord",
"Server side authentication failed!" : "Authenticatie bij de server mislukte!",
"Please contact your administrator." : "Neem contact op met je systeembeheerder.",
@@ -310,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt ingeschakeld, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Je data folder en je bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om je webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om je datadirectory te verplaatsen naar een locatie buiten de document-root van de webserver.",
+ "Shared with {recipients}" : "Gedeeld met {recipients}",
"Error while unsharing" : "Fout tijdens het stoppen met delen",
"can reshare" : "kan doordelen",
"can edit" : "kan wijzigen",
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 4f3f60dcf6e..f25b2083c69 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Nagłówek HTTP \"Strict-Transport-Security\" nie jest ustawiony na przynajmniej \"{seconds}\" sekund. Dla zwiększenia bezpieczeństwa zalecamy ustawienie HSTS tak jak opisaliśmy to w naszych <a href=\"{docUrl}\" rel=\"noreferrer\">wskazówkach dot. bezpieczeństwa</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Dostęp do tej strony jest za pośrednictwem protokołu HTTP. Zalecamy skonfigurowanie dostępu do serwera za pomocą protokołu HTTPS zamiast HTTP, jak to opisano w naszych <a href=\"{docUrl}\">wskazówkach bezpieczeństwa</a>.",
"Shared" : "Udostępniono",
- "Shared with {recipients}" : "Współdzielony z {recipients}",
"Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia",
"The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia",
"Set expiration date" : "Ustaw datę wygaśnięcia",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Twój katalog z danymi i twoje pliki są prawdopodobnie dostępne przez Internet. Plik .htaccess nie działa. Silnie rekomendujemy, żebyś skonfigurował serwer webowy, żeby katalog z danymi nie był dalej dostępny lub przenieś katalog z danymi poza katalog \"document root\" serwera web.",
+ "Shared with {recipients}" : "Współdzielony z {recipients}",
"Error while unsharing" : "Błąd podczas zatrzymywania udostepniania",
"can reshare" : "mogą udostępniać dalej",
"can edit" : "może edytować",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index 82a90fc5b16..0821cf2d398 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Nagłówek HTTP \"Strict-Transport-Security\" nie jest ustawiony na przynajmniej \"{seconds}\" sekund. Dla zwiększenia bezpieczeństwa zalecamy ustawienie HSTS tak jak opisaliśmy to w naszych <a href=\"{docUrl}\" rel=\"noreferrer\">wskazówkach dot. bezpieczeństwa</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Dostęp do tej strony jest za pośrednictwem protokołu HTTP. Zalecamy skonfigurowanie dostępu do serwera za pomocą protokołu HTTPS zamiast HTTP, jak to opisano w naszych <a href=\"{docUrl}\">wskazówkach bezpieczeństwa</a>.",
"Shared" : "Udostępniono",
- "Shared with {recipients}" : "Współdzielony z {recipients}",
"Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia",
"The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia",
"Set expiration date" : "Ustaw datę wygaśnięcia",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Twoje pliki są zaszyfrowane. Jeśli nie włączyłeś klucza odzyskiwania, nie będzie możliwości odszyfrowania tych plików po zresetowaniu hasła.<br>Jeśli nie jesteś pewien co zrobić, skontaktuj się ze swoim administratorem, zanim bedziesz kontynuował. <br/> Czy chcesz kontynuować?\n ",
"Ok" : "OK",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Twój katalog z danymi i twoje pliki są prawdopodobnie dostępne przez Internet. Plik .htaccess nie działa. Silnie rekomendujemy, żebyś skonfigurował serwer webowy, żeby katalog z danymi nie był dalej dostępny lub przenieś katalog z danymi poza katalog \"document root\" serwera web.",
+ "Shared with {recipients}" : "Współdzielony z {recipients}",
"Error while unsharing" : "Błąd podczas zatrzymywania udostepniania",
"can reshare" : "mogą udostępniać dalej",
"can edit" : "może edytować",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 8cf2c6f9386..f5869233b7f 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para pelo menos \"{segundos}\" segundos. Para maior segurança recomendamos a ativação HSTS como descrito em nossas <a href=\"{docUrl}\" rel=\"noreferrer\">dicas de segurança</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Você está acessando este site via HTTP. Sugerimos fortemente que você configure o servidor para exigir o uso de HTTPS como descrito em nossas  <a href=\"{docUrl}\">dicas de segurança</a>.",
"Shared" : "Compartilhado",
- "Shared with {recipients}" : "Compartilhado com {recipients}",
"Error setting expiration date" : "Erro ao definir data de expiração",
"The public link will expire no later than {days} days after it is created" : "O link público irá expirar não antes de {days} depois de criado",
"Set expiration date" : "Definir data de expiração",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Logins alternativos",
"Account access" : "Acesso à conta",
"You are about to grant %s access to your %s account." : "Você está prestes a conceder %s acesso à sua %s conta.",
+ "Grant access" : "Conceder acesso",
"App token" : "Token do aplicativo",
"Alternative login using app token" : "Login alternativo usando o token do aplicativo",
"Redirecting …" : "Redirecionando...",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos estão criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br />Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br />Deseja realmente continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos provavelmente estão acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Sugerimos que você configure o servidor web de maneira que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.",
+ "Shared with {recipients}" : "Compartilhado com {recipients}",
"Error while unsharing" : "Erro ao descompartilhar",
"can reshare" : "pode recompartilhar",
"can edit" : "pode editar",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 1245bdc3559..74ddcf617a9 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para pelo menos \"{segundos}\" segundos. Para maior segurança recomendamos a ativação HSTS como descrito em nossas <a href=\"{docUrl}\" rel=\"noreferrer\">dicas de segurança</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Você está acessando este site via HTTP. Sugerimos fortemente que você configure o servidor para exigir o uso de HTTPS como descrito em nossas  <a href=\"{docUrl}\">dicas de segurança</a>.",
"Shared" : "Compartilhado",
- "Shared with {recipients}" : "Compartilhado com {recipients}",
"Error setting expiration date" : "Erro ao definir data de expiração",
"The public link will expire no later than {days} days after it is created" : "O link público irá expirar não antes de {days} depois de criado",
"Set expiration date" : "Definir data de expiração",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Logins alternativos",
"Account access" : "Acesso à conta",
"You are about to grant %s access to your %s account." : "Você está prestes a conceder %s acesso à sua %s conta.",
+ "Grant access" : "Conceder acesso",
"App token" : "Token do aplicativo",
"Alternative login using app token" : "Login alternativo usando o token do aplicativo",
"Redirecting …" : "Redirecionando...",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos estão criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br />Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br />Deseja realmente continuar?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos provavelmente estão acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Sugerimos que você configure o servidor web de maneira que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.",
+ "Shared with {recipients}" : "Compartilhado com {recipients}",
"Error while unsharing" : "Erro ao descompartilhar",
"can reshare" : "pode recompartilhar",
"can edit" : "pode editar",
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index 31dc53390ec..09f1b6ba75d 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -119,7 +119,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para um mínimo de \"{seconds}\" segundos. Para uma segurança melhorada recomendados a ativação do HSTS como descrito nas nossas <a href=\"{docUrl}\" rel=\"noreferrer\">dicas de segurança</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
"Shared" : "Partilhado",
- "Shared with {recipients}" : "Partilhado com {recipients}",
"Error setting expiration date" : "Erro ao definir a data de expiração",
"The public link will expire no later than {days} days after it is created" : "A hiperligação pública irá expirar, o mais tardar {days} dias depois da sua criação",
"Set expiration date" : "Definir a data de expiração",
@@ -296,6 +295,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"Ok" : "CONFIRMAR",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir da Internet. O ficheiro .htaccess não está a funcionar correctamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
+ "Shared with {recipients}" : "Partilhado com {recipients}",
"Error while unsharing" : "Erro ao remover a partilha",
"can reshare" : "pode voltar a partilhar",
"can edit" : "pode editar",
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index 00b163d90c3..1e9a4ceb87d 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -117,7 +117,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para um mínimo de \"{seconds}\" segundos. Para uma segurança melhorada recomendados a ativação do HSTS como descrito nas nossas <a href=\"{docUrl}\" rel=\"noreferrer\">dicas de segurança</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas <a href=\"{docUrl}\">dicas de segurança</a>.",
"Shared" : "Partilhado",
- "Shared with {recipients}" : "Partilhado com {recipients}",
"Error setting expiration date" : "Erro ao definir a data de expiração",
"The public link will expire no later than {days} days after it is created" : "A hiperligação pública irá expirar, o mais tardar {days} dias depois da sua criação",
"Set expiration date" : "Definir a data de expiração",
@@ -294,6 +293,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros estão encriptados. Se não ativou a chave de recuperação, não terá nenhum modo para voltar obter os seus dados depois de reiniciar a sua senha. <br />Se não tem a certeza do que fazer, por favor, contacte o seu administrador antes de continuar.<br /> Tem a certeza que quer continuar?",
"Ok" : "CONFIRMAR",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir da Internet. O ficheiro .htaccess não está a funcionar correctamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.",
+ "Shared with {recipients}" : "Partilhado com {recipients}",
"Error while unsharing" : "Erro ao remover a partilha",
"can reshare" : "pode voltar a partilhar",
"can edit" : "pode editar",
diff --git a/core/l10n/ro.js b/core/l10n/ro.js
index 075f676de1c..833b57c0a4e 100644
--- a/core/l10n/ro.js
+++ b/core/l10n/ro.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Header-ul HTTP \"Strict-Transport-Security\" nu este configurat cu cel puțin \"{seconds}\" secunde. Pentru o securitate îmbunătățită recomandăm activarea HSTS așa cum este descris în <a href=\"{docUrl}\" rel=\"noreferrer\">sfaturile de securitate</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Accesezi acest site prin HTTP. Îți sugerăm cu tărie să configurezi serverul tău să foloseasca HTTPS, așa cum este descris în <a href=\"{docUrl}\" rel=\"noreferrer\">sfaturile de securitate</a>.",
"Shared" : "Partajat",
- "Shared with {recipients}" : "Partajat cu {recipients}",
"Error setting expiration date" : "Eroare la specificarea datei de expirare",
"The public link will expire no later than {days} days after it is created" : "Legătura publică va expira nu mai târziu de {days} zile de la ziua creării",
"Set expiration date" : "Specifică data expirării",
@@ -311,6 +310,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Fișierele tale sunt criptate. Dacă nu ai activat o cheie de restabilire, e posibil să nu mai poți accesa informațiile tale după o resetare a parolei.<br />Dacă nu ești sigur ce trebuie să faci, contactează administratorul înainte de a continua. <br /> Sigur vrei să continui?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Directorul de date și fișierele tale sunt probabil accesibile de pe Internet. Fișierul .htaccess nu funcționează. Îți recomandăm cu tărie să configurezi serverul web astfel încât folderul de date să nu mai fie accesibil, sau să muți folderul în afara rădăcinii de documente a serverului web.",
+ "Shared with {recipients}" : "Partajat cu {recipients}",
"Error while unsharing" : "Eroare la anularea partajării",
"can reshare" : "poate partaja mai departe",
"can edit" : "poate edita",
diff --git a/core/l10n/ro.json b/core/l10n/ro.json
index 33c3492c2a1..c0673ba5a69 100644
--- a/core/l10n/ro.json
+++ b/core/l10n/ro.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Header-ul HTTP \"Strict-Transport-Security\" nu este configurat cu cel puțin \"{seconds}\" secunde. Pentru o securitate îmbunătățită recomandăm activarea HSTS așa cum este descris în <a href=\"{docUrl}\" rel=\"noreferrer\">sfaturile de securitate</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Accesezi acest site prin HTTP. Îți sugerăm cu tărie să configurezi serverul tău să foloseasca HTTPS, așa cum este descris în <a href=\"{docUrl}\" rel=\"noreferrer\">sfaturile de securitate</a>.",
"Shared" : "Partajat",
- "Shared with {recipients}" : "Partajat cu {recipients}",
"Error setting expiration date" : "Eroare la specificarea datei de expirare",
"The public link will expire no later than {days} days after it is created" : "Legătura publică va expira nu mai târziu de {days} zile de la ziua creării",
"Set expiration date" : "Specifică data expirării",
@@ -309,6 +308,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Fișierele tale sunt criptate. Dacă nu ai activat o cheie de restabilire, e posibil să nu mai poți accesa informațiile tale după o resetare a parolei.<br />Dacă nu ești sigur ce trebuie să faci, contactează administratorul înainte de a continua. <br /> Sigur vrei să continui?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Directorul de date și fișierele tale sunt probabil accesibile de pe Internet. Fișierul .htaccess nu funcționează. Îți recomandăm cu tărie să configurezi serverul web astfel încât folderul de date să nu mai fie accesibil, sau să muți folderul în afara rădăcinii de documente a serverului web.",
+ "Shared with {recipients}" : "Partajat cu {recipients}",
"Error while unsharing" : "Eroare la anularea partajării",
"can reshare" : "poate partaja mai departe",
"can edit" : "poate edita",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 41ccbd9160d..e148ad10525 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «{seconds}» секунд. Для улучшения безопасности рекомендуется включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Вы зашли на этот сайт через HTTP. Мы настоятельно рекомендуем настроить ваш сервер на использование HTTPS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
"Shared" : "Общий доступ",
- "Shared with {recipients}" : "Вы поделились с {recipients}",
"Error setting expiration date" : "Ошибка при установке срока доступа",
"The public link will expire no later than {days} days after it is created" : "Срок действия общедоступной ссылки истекает не позже чем через {days} дней после её создания",
"Set expiration date" : "Установить срок действия",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?",
"Ok" : "Ок",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из Интернета. Файл .htaccess не работает. Мы настоятельно рекомендуем Вам настроить веб сервер таким образом, чтобы каталог данных не был больше доступен или переместить каталог данных за пределы корня веб сервера.",
+ "Shared with {recipients}" : "Вы поделились с {recipients}",
"Error while unsharing" : "При закрытии доступа произошла ошибка",
"can reshare" : "можно делиться",
"can edit" : "можно редактировать",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index 7012873812b..c3a0591812c 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «{seconds}» секунд. Для улучшения безопасности рекомендуется включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Вы зашли на этот сайт через HTTP. Мы настоятельно рекомендуем настроить ваш сервер на использование HTTPS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.",
"Shared" : "Общий доступ",
- "Shared with {recipients}" : "Вы поделились с {recipients}",
"Error setting expiration date" : "Ошибка при установке срока доступа",
"The public link will expire no later than {days} days after it is created" : "Срок действия общедоступной ссылки истекает не позже чем через {days} дней после её создания",
"Set expiration date" : "Установить срок действия",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши файлы зашифрованы. Если вы не включили ключ восстановления, то ваши данные будут недоступны после сброса пароля.<br />Если вы не уверены что делать дальше - обратитесь к вашему администратору.<br />Вы действительно хотите продолжить?",
"Ok" : "Ок",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из Интернета. Файл .htaccess не работает. Мы настоятельно рекомендуем Вам настроить веб сервер таким образом, чтобы каталог данных не был больше доступен или переместить каталог данных за пределы корня веб сервера.",
+ "Shared with {recipients}" : "Вы поделились с {recipients}",
"Error while unsharing" : "При закрытии доступа произошла ошибка",
"can reshare" : "можно делиться",
"can edit" : "можно редактировать",
diff --git a/core/l10n/sk.js b/core/l10n/sk.js
index b2b39b6555c..e244dc2d6fd 100644
--- a/core/l10n/sk.js
+++ b/core/l10n/sk.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Hlavička HTTP \"Strict-Transport-Security\" nie je nakonfigurovaná aspoň na \"{seconds}\" sekúnd. Pre zvýšenie bezpečnosti odporúčame povoliť HSTS tak, ako je to popísané v našich <a href=\"{docUrl}\" rel=\"noreferrer\">bezpečnostných tipoch</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Prístup na túto stránku sa uskutočňuje prostredníctvom protokolu HTTP. Dôrazne odporúčame, aby ste namiesto toho nakonfigurovali server tak, aby vyžadoval použitie HTTPS, ako je to popísané v našich <a href=\"{docUrl}\">bezpečnostných tipoch</a>.",
"Shared" : "Sprístupnené",
- "Shared with {recipients}" : "Sprístupnené {recipients}",
"Error setting expiration date" : "Chyba pri nastavení dátumu expirácie",
"The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení",
"Set expiration date" : "Nastaviť dátum expirácie",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný alebo presunúť priečinok s dátami mimo priestoru, ktorý webový server sprístupňuje.",
+ "Shared with {recipients}" : "Sprístupnené {recipients}",
"Error while unsharing" : "Chyba počas odobratia sprístupnenia",
"can reshare" : "Môže opätovne zdieľať",
"can edit" : "môže upraviť",
diff --git a/core/l10n/sk.json b/core/l10n/sk.json
index a1899ebb724..c65689fb85f 100644
--- a/core/l10n/sk.json
+++ b/core/l10n/sk.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Hlavička HTTP \"Strict-Transport-Security\" nie je nakonfigurovaná aspoň na \"{seconds}\" sekúnd. Pre zvýšenie bezpečnosti odporúčame povoliť HSTS tak, ako je to popísané v našich <a href=\"{docUrl}\" rel=\"noreferrer\">bezpečnostných tipoch</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Prístup na túto stránku sa uskutočňuje prostredníctvom protokolu HTTP. Dôrazne odporúčame, aby ste namiesto toho nakonfigurovali server tak, aby vyžadoval použitie HTTPS, ako je to popísané v našich <a href=\"{docUrl}\">bezpečnostných tipoch</a>.",
"Shared" : "Sprístupnené",
- "Shared with {recipients}" : "Sprístupnené {recipients}",
"Error setting expiration date" : "Chyba pri nastavení dátumu expirácie",
"The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení",
"Set expiration date" : "Nastaviť dátum expirácie",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Súbory sú zašifrované. Ak ste nepovolili kľúč pre obnovenie, neexistuje žiadny spôsob, ako obnoviť vaše dáta po obnovení vášho hesla. <br /> Ak si nie ste istí čo urobiť, prosím skôr než budete pokračovať, obráťte sa na administrátora. <br /> Naozaj chcete pokračovať?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný alebo presunúť priečinok s dátami mimo priestoru, ktorý webový server sprístupňuje.",
+ "Shared with {recipients}" : "Sprístupnené {recipients}",
"Error while unsharing" : "Chyba počas odobratia sprístupnenia",
"can reshare" : "Môže opätovne zdieľať",
"can edit" : "môže upraviť",
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index c54cd7f6b7b..3ebf92ef6d8 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -110,7 +110,6 @@ OC.L10N.register(
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Glava \"{header}\" HTTP ni nastavljena na \"{expected}\". To je potencialno varnostna luknja in vam priporočamo, da to odpravite.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Do spletišča je omogočen dostop prek protokola HTTP. Priporočljivo je omogočiti podporo za varni protokol HTTPS. Več podrobnosti je zapisanih med <a href=\"{docUrl}\">varnostnimi namigi</a>.",
"Shared" : "V souporabi",
- "Shared with {recipients}" : "V souporabi z {recipients}",
"Error setting expiration date" : "Napaka nastavljanja datuma preteka",
"The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.",
"Set expiration date" : "Nastavi datum preteka",
@@ -275,6 +274,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"Ok" : "V redu",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Podatkovna mapa in datoteke so najverjetneje dostopni prek Interneta, ker datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da dostop prek zunanjega omrežja ni mogoč, ali pa tako, da podatkovna mapa ni znotraj korenske mape strežnika.",
+ "Shared with {recipients}" : "V souporabi z {recipients}",
"Error while unsharing" : "Napaka med odstranjevanjem souporabe",
"can reshare" : "lahko deli",
"can edit" : "lahko ureja",
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index f356a00c139..f37e9e81f2b 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -108,7 +108,6 @@
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Glava \"{header}\" HTTP ni nastavljena na \"{expected}\". To je potencialno varnostna luknja in vam priporočamo, da to odpravite.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Do spletišča je omogočen dostop prek protokola HTTP. Priporočljivo je omogočiti podporo za varni protokol HTTPS. Več podrobnosti je zapisanih med <a href=\"{docUrl}\">varnostnimi namigi</a>.",
"Shared" : "V souporabi",
- "Shared with {recipients}" : "V souporabi z {recipients}",
"Error setting expiration date" : "Napaka nastavljanja datuma preteka",
"The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.",
"Set expiration date" : "Nastavi datum preteka",
@@ -273,6 +272,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Datoteke so šifrirane. Če niste omogočili obnovitvenega ključa, po ponastavitvi gesla ne bo mogoč dostop do datotek.<br />V primeru, da niste prepričani, kaj storiti, stopite v stik s skrbnikom sistema.<br />Ali ste prepričani, da želite nadaljevati?",
"Ok" : "V redu",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Podatkovna mapa in datoteke so najverjetneje dostopni prek Interneta, ker datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da dostop prek zunanjega omrežja ni mogoč, ali pa tako, da podatkovna mapa ni znotraj korenske mape strežnika.",
+ "Shared with {recipients}" : "V souporabi z {recipients}",
"Error while unsharing" : "Napaka med odstranjevanjem souporabe",
"can reshare" : "lahko deli",
"can edit" : "lahko ureja",
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 8a574dcec7d..e0cc6bcf2e0 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -122,7 +122,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Parametri \"Strict-Transport-Security\" HTTP s’është formësuar të paktën \"{seconds}\" sekonda. Për siguri të thelluar, ju këshillojmë aktivizimin e HSTS-së, ashtu si përshkruhet në <a href=\"{docUrl}\" rel=\"noreferrer\">këshillat tona mbi sigurinë</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Po e përdorni këtë sajt përmes HTTP-je. Këshillojmë me forcë ta formësoni shërbyesin tuaj të kërkojë medoemos përdorimin e HTTPS-së, siç përshkruhet te <a href=\"{docUrl}\">këshillat tona mbi sigurinë</a>.",
"Shared" : "Ndarë",
- "Shared with {recipients}" : "Ndarë me {recipients}",
"Error setting expiration date" : "Gabim në caktimin e datës së skadimit",
"The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit të saj",
"Set expiration date" : "Caktoni datë skadimi",
@@ -302,6 +301,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
"Ok" : "Në rregull",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Drejtoria juaj e të dhënave dhe kartelat tuaja ka shumë mundësi të jenë të arritshme që nga interneti. Kartela .htaccess s’funksionon. Këshillojmë me forcë që ta formësoni shërbyesin tuaj web në një mënyrë që drejtoria e të dhënave të mos lejojë më hyrje, ose ta zhvendosni drejtorinë e të dhënave jashtë rrënjës së dokumenteve të shërbyesit web.",
+ "Shared with {recipients}" : "Ndarë me {recipients}",
"Error while unsharing" : "Gabim gjatë heqjes së ndarjes",
"can reshare" : "mund të rishpërndahet",
"can edit" : "mund të përpunojnë",
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index a37550561c4..68d2692c7f6 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -120,7 +120,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Parametri \"Strict-Transport-Security\" HTTP s’është formësuar të paktën \"{seconds}\" sekonda. Për siguri të thelluar, ju këshillojmë aktivizimin e HSTS-së, ashtu si përshkruhet në <a href=\"{docUrl}\" rel=\"noreferrer\">këshillat tona mbi sigurinë</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Po e përdorni këtë sajt përmes HTTP-je. Këshillojmë me forcë ta formësoni shërbyesin tuaj të kërkojë medoemos përdorimin e HTTPS-së, siç përshkruhet te <a href=\"{docUrl}\">këshillat tona mbi sigurinë</a>.",
"Shared" : "Ndarë",
- "Shared with {recipients}" : "Ndarë me {recipients}",
"Error setting expiration date" : "Gabim në caktimin e datës së skadimit",
"The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit të saj",
"Set expiration date" : "Caktoni datë skadimi",
@@ -300,6 +299,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Kartelat tuaja janë të fshehtëzuara. Nëse s’keni aktivizuar kyçin e rimarrjeve, nuk do të ketë ndonjë rrugë për të marrë sërish të dhënat tuaja pasi të jetë ricaktuar fjalëkalimi juaj.<br />Nëse s’jeni i sigurt se ç’duhet bërë, ju lutemi, përpara se të vazhdoni, lidhuni me përgjegjësin tuaj. <br />Doni vërtet të vazhdoni?",
"Ok" : "Në rregull",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Drejtoria juaj e të dhënave dhe kartelat tuaja ka shumë mundësi të jenë të arritshme që nga interneti. Kartela .htaccess s’funksionon. Këshillojmë me forcë që ta formësoni shërbyesin tuaj web në një mënyrë që drejtoria e të dhënave të mos lejojë më hyrje, ose ta zhvendosni drejtorinë e të dhënave jashtë rrënjës së dokumenteve të shërbyesit web.",
+ "Shared with {recipients}" : "Ndarë me {recipients}",
"Error while unsharing" : "Gabim gjatë heqjes së ndarjes",
"can reshare" : "mund të rishpërndahet",
"can edit" : "mund të përpunojnë",
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 833c94ce68d..8025d76179b 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP заглавље није подешено да буде бар \"{seconds}\" секунди. За додатну сигурност, предлажемо да омогућите HSTS као што је описано у нашим <a href=\"{docUrl}\" rel=\"noreferrer\">сигурносним саветима</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Приступате овом сајту преко HTTP-а. Препоручујемо да подесите Ваш сервер да захтева HTTPS као што је описано у нашим <a href=\"{docUrl}\">безбедоносним саветима</a>.",
"Shared" : "Дељено",
- "Shared with {recipients}" : "Дељено са {recipients}",
"Error setting expiration date" : "Грешка при постављању датума истека",
"The public link will expire no later than {days} days after it is created" : "Јавна веза ће престати да важи {days} дана након стварања",
"Set expiration date" : "Постави датум истека",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши фајлови су шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након ресетовања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?",
"Ok" : "У реду",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.",
+ "Shared with {recipients}" : "Дељено са {recipients}",
"Error while unsharing" : "Грешка при укидању дељења",
"can reshare" : "може да дели даље",
"can edit" : "може да мења",
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index 27933119374..4bcf9ace0b3 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP заглавље није подешено да буде бар \"{seconds}\" секунди. За додатну сигурност, предлажемо да омогућите HSTS као што је описано у нашим <a href=\"{docUrl}\" rel=\"noreferrer\">сигурносним саветима</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Приступате овом сајту преко HTTP-а. Препоручујемо да подесите Ваш сервер да захтева HTTPS као што је описано у нашим <a href=\"{docUrl}\">безбедоносним саветима</a>.",
"Shared" : "Дељено",
- "Shared with {recipients}" : "Дељено са {recipients}",
"Error setting expiration date" : "Грешка при постављању датума истека",
"The public link will expire no later than {days} days after it is created" : "Јавна веза ће престати да важи {days} дана након стварања",
"Set expiration date" : "Постави датум истека",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваши фајлови су шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након ресетовања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?",
"Ok" : "У реду",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.",
+ "Shared with {recipients}" : "Дељено са {recipients}",
"Error while unsharing" : "Грешка при укидању дељења",
"can reshare" : "може да дели даље",
"can edit" : "може да мења",
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index 0119dee38f9..62f1d228fa5 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP headern är inte konfigurerad till minst \"{seconds}\" sekunder. För förbättrad säkerhet rekommenderas aktivering utav HSTS som beskrivs i våra <a href=\"{docUrl}\" rel=\"noreferrer\">säkerhetstips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du har begärt denna sidan över HTTP. Vi föreslår starkt att du konfigurerar din webbserver att kräva använding utav HTTPS istället, som beskrivs i våra <a href=\"{docUrl}\">säkerhetstips</a>.",
"Shared" : "Delad",
- "Shared with {recipients}" : "Delad med {recipients}",
"Error setting expiration date" : "Fel vid val av utgångsdatum",
"The public link will expire no later than {days} days after it is created" : "Den offentliga länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
"Set expiration date" : "Välj utgångsdatum",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din datakatalog och dina filer är sannolikt tillgängliga för vem som helst på internet. .htaccess filen fungerar inte korrekt. Vi rekommenderar starkt att du konfigurerar din webbserver på ett sätt som gör din datakatalog otillgänglig för vem som helst på internet eller att du flyttar ut hela datakatalogen ifrån webbserverns webbrot.",
+ "Shared with {recipients}" : "Delad med {recipients}",
"Error while unsharing" : "Fel när delning skulle avslutas",
"can reshare" : "kan dela vidare",
"can edit" : "kan redigera",
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index 126a5895aaa..0655e1d380d 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP headern är inte konfigurerad till minst \"{seconds}\" sekunder. För förbättrad säkerhet rekommenderas aktivering utav HSTS som beskrivs i våra <a href=\"{docUrl}\" rel=\"noreferrer\">säkerhetstips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du har begärt denna sidan över HTTP. Vi föreslår starkt att du konfigurerar din webbserver att kräva använding utav HTTPS istället, som beskrivs i våra <a href=\"{docUrl}\">säkerhetstips</a>.",
"Shared" : "Delad",
- "Shared with {recipients}" : "Delad med {recipients}",
"Error setting expiration date" : "Fel vid val av utgångsdatum",
"The public link will expire no later than {days} days after it is created" : "Den offentliga länken kommer sluta gälla inte senare än {days} dagar efter att den skapades",
"Set expiration date" : "Välj utgångsdatum",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dina filer är krypterade. Om du inte angett någon återställningsnyckel, kommer det att vara omöjligt att få tillbaka dina data efter att lösenordet är återställt..<br />Om du är osäker på vad du ska göra, vänligen kontakta din administratör innan du fortsätter.<br />Är du verkligen helt säker på att du vill fortsätta?",
"Ok" : "Ok",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din datakatalog och dina filer är sannolikt tillgängliga för vem som helst på internet. .htaccess filen fungerar inte korrekt. Vi rekommenderar starkt att du konfigurerar din webbserver på ett sätt som gör din datakatalog otillgänglig för vem som helst på internet eller att du flyttar ut hela datakatalogen ifrån webbserverns webbrot.",
+ "Shared with {recipients}" : "Delad med {recipients}",
"Error while unsharing" : "Fel när delning skulle avslutas",
"can reshare" : "kan dela vidare",
"can edit" : "kan redigera",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index d53ea30519f..400d1a1a472 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP üst bilgisi en azından\"{seconds}\" saniyedir yapılandırılmamış. Gelişmiş güvenlik sağlamak için <a href=\"{docUrl}\" rel=\"noreferrer\">güvenlik ipuçlarında</a> anlatıldığı şekilde HSTS özelliğinin etkinleştirilmesi önerilir.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Bu siteye HTTP üzerinde erişiyorsunuz. Sunucunuzu <a href=\"{docUrl}\">güvenlik ipuçlarında</a> anlatıldığı şekilde HTTPS kullanımını zorlayacak şekilde yapılandırmanız önemle önerilir.",
"Shared" : "Paylaşılmış",
- "Shared with {recipients}" : "{recipients} ile paylaşılmış",
"Error setting expiration date" : "Son kullanma tarihi ayarlanırken sorun çıktı",
"The public link will expire no later than {days} days after it is created" : "Herkese açık bağlantı, oluşturulduktan {days} gün sonra kullanımdan kaldırılacak",
"Set expiration date" : "Son kullanma tarihini ayarla",
@@ -276,6 +275,7 @@ OC.L10N.register(
"Alternative Logins" : "Alternatif Oturum Açmalar",
"Account access" : "Hesap erişimi",
"You are about to grant %s access to your %s account." : "%s erişim iznini %s hesabınız için vermek üzeresiniz.",
+ "Grant access" : "Erişim izni ver",
"App token" : "Uygulama Kodu",
"Alternative login using app token" : "Uygulama kodu ile alternatif oturum açma",
"Redirecting …" : "Yönlendiriliyor...",
@@ -313,6 +313,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmediyseniz, parola sıfırlama işleminden sonra verilerinize erişemeyeceksiniz.<br />Ne yapacağınızdan emin değilseniz, ilerlemeden önce sistem yöneticiniz ile görüşün.<br />Gerçekten devam etmek istiyor musunuz?",
"Ok" : "Tamam",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Veri klasörünüz ve dosyalarınız İnternet üzerinden erişime açık olabilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri klasörüne erişimi engellemeniz ya da veri klasörünü web sunucu kök klasörü dışına taşımanız önemle önerilir.",
+ "Shared with {recipients}" : "{recipients} ile paylaşılmış",
"Error while unsharing" : "Paylaşımdan kaldırılırken sorun çıktı",
"can reshare" : "yeniden paylaşabilir",
"can edit" : "düzenleyebilir",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 865d933e439..59e4de92e62 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP üst bilgisi en azından\"{seconds}\" saniyedir yapılandırılmamış. Gelişmiş güvenlik sağlamak için <a href=\"{docUrl}\" rel=\"noreferrer\">güvenlik ipuçlarında</a> anlatıldığı şekilde HSTS özelliğinin etkinleştirilmesi önerilir.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Bu siteye HTTP üzerinde erişiyorsunuz. Sunucunuzu <a href=\"{docUrl}\">güvenlik ipuçlarında</a> anlatıldığı şekilde HTTPS kullanımını zorlayacak şekilde yapılandırmanız önemle önerilir.",
"Shared" : "Paylaşılmış",
- "Shared with {recipients}" : "{recipients} ile paylaşılmış",
"Error setting expiration date" : "Son kullanma tarihi ayarlanırken sorun çıktı",
"The public link will expire no later than {days} days after it is created" : "Herkese açık bağlantı, oluşturulduktan {days} gün sonra kullanımdan kaldırılacak",
"Set expiration date" : "Son kullanma tarihini ayarla",
@@ -274,6 +273,7 @@
"Alternative Logins" : "Alternatif Oturum Açmalar",
"Account access" : "Hesap erişimi",
"You are about to grant %s access to your %s account." : "%s erişim iznini %s hesabınız için vermek üzeresiniz.",
+ "Grant access" : "Erişim izni ver",
"App token" : "Uygulama Kodu",
"Alternative login using app token" : "Uygulama kodu ile alternatif oturum açma",
"Redirecting …" : "Yönlendiriliyor...",
@@ -311,6 +311,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Dosyalarınız şifrelenmiş. Kurtarma anahtarını etkinleştirmediyseniz, parola sıfırlama işleminden sonra verilerinize erişemeyeceksiniz.<br />Ne yapacağınızdan emin değilseniz, ilerlemeden önce sistem yöneticiniz ile görüşün.<br />Gerçekten devam etmek istiyor musunuz?",
"Ok" : "Tamam",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Veri klasörünüz ve dosyalarınız İnternet üzerinden erişime açık olabilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak veri klasörüne erişimi engellemeniz ya da veri klasörünü web sunucu kök klasörü dışına taşımanız önemle önerilir.",
+ "Shared with {recipients}" : "{recipients} ile paylaşılmış",
"Error while unsharing" : "Paylaşımdan kaldırılırken sorun çıktı",
"can reshare" : "yeniden paylaşabilir",
"can edit" : "düzenleyebilir",
diff --git a/core/l10n/uk.js b/core/l10n/uk.js
index 6b1b4ec0c73..c631df946af 100644
--- a/core/l10n/uk.js
+++ b/core/l10n/uk.js
@@ -114,7 +114,6 @@ OC.L10N.register(
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.",
"Shared" : "Опубліковано",
- "Shared with {recipients}" : "Опубліковано для {recipients}",
"Error setting expiration date" : "Помилка при встановленні терміну дії",
"The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення",
"Set expiration date" : "Встановити термін дії",
@@ -260,6 +259,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"Ok" : "Гаразд",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.",
+ "Shared with {recipients}" : "Опубліковано для {recipients}",
"Error while unsharing" : "Помилка під час відміни публікації",
"can reshare" : "може ділитися з іншими",
"can edit" : "може редагувати",
diff --git a/core/l10n/uk.json b/core/l10n/uk.json
index aed4056e16e..b47c9d76209 100644
--- a/core/l10n/uk.json
+++ b/core/l10n/uk.json
@@ -112,7 +112,6 @@
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.",
"Shared" : "Опубліковано",
- "Shared with {recipients}" : "Опубліковано для {recipients}",
"Error setting expiration date" : "Помилка при встановленні терміну дії",
"The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення",
"Set expiration date" : "Встановити термін дії",
@@ -258,6 +257,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?",
"Ok" : "Гаразд",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.",
+ "Shared with {recipients}" : "Опубліковано для {recipients}",
"Error while unsharing" : "Помилка під час відміни публікації",
"can reshare" : "може ділитися з іншими",
"can edit" : "може редагувати",
diff --git a/core/l10n/vi.js b/core/l10n/vi.js
index 70284f8868e..477eb3b174e 100644
--- a/core/l10n/vi.js
+++ b/core/l10n/vi.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Phần \"Strict-Transport-Security\" HTTP header không được cấu hình tổi thiểu \"{seconds}\" giây. Để tăng cường bảo mật, chúng tôi đề nghị bạn bật HSTS theo hướng dẫn trong mục <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Bạn đang truy cập site này bằng giao thức HTTP. Chúng tôi đề nghị bạn cấu hình server của bạn phải yêu cầu truy cập bằng giao thức HTTPS như được mô tả trong mục <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Được chia sẻ",
- "Shared with {recipients}" : "Được chia sẻ với {recipients}",
"Error setting expiration date" : "Lỗi cấu hình ngày kết thúc",
"The public link will expire no later than {days} days after it is created" : "Liên kết công khai sẽ hết hạn sau {days} ngày sau khi được tạo",
"Set expiration date" : "Đặt ngày kết thúc",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Các tệp tin của bạn đang bị mã hóa. Nếu bạn chưa bật khóa khôi phục, sẽ không có cách nào lấy lại dữ liệu của bạn khi mật khẩu của bạn bị thiết lập lại.<br />Nếu bạn không chắc điều gì mình sẽ làm, xin vui lòng liên hệ với quản trị hệ thống để tham vấn trước khi bạn tiếp tục. <br />Bạn có thực sự muốn làm điều này?",
"Ok" : "Đồng ý",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Thư mục dữ liệu và file của bạn có thể truy cập từ Internet. File .htaccess không hoạt động. Chúng tôi khuyến cáo bạn cấu hình web server của bạn sao cho thư mục dữ liệu (data folder) không thể truy câp được hoặc di chuyển thư mục data ra bên ngoài thư mục gốc (root) của Web Server.",
+ "Shared with {recipients}" : "Được chia sẻ với {recipients}",
"Error while unsharing" : "Lỗi trong quá trình gỡ chia sẻ",
"can reshare" : "Có thể chia sẻ lại",
"can edit" : "có thể chỉnh sửa",
diff --git a/core/l10n/vi.json b/core/l10n/vi.json
index df39b657988..642b5cfef1a 100644
--- a/core/l10n/vi.json
+++ b/core/l10n/vi.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Phần \"Strict-Transport-Security\" HTTP header không được cấu hình tổi thiểu \"{seconds}\" giây. Để tăng cường bảo mật, chúng tôi đề nghị bạn bật HSTS theo hướng dẫn trong mục <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Bạn đang truy cập site này bằng giao thức HTTP. Chúng tôi đề nghị bạn cấu hình server của bạn phải yêu cầu truy cập bằng giao thức HTTPS như được mô tả trong mục <a href=\"{docUrl}\">security tips</a>.",
"Shared" : "Được chia sẻ",
- "Shared with {recipients}" : "Được chia sẻ với {recipients}",
"Error setting expiration date" : "Lỗi cấu hình ngày kết thúc",
"The public link will expire no later than {days} days after it is created" : "Liên kết công khai sẽ hết hạn sau {days} ngày sau khi được tạo",
"Set expiration date" : "Đặt ngày kết thúc",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Các tệp tin của bạn đang bị mã hóa. Nếu bạn chưa bật khóa khôi phục, sẽ không có cách nào lấy lại dữ liệu của bạn khi mật khẩu của bạn bị thiết lập lại.<br />Nếu bạn không chắc điều gì mình sẽ làm, xin vui lòng liên hệ với quản trị hệ thống để tham vấn trước khi bạn tiếp tục. <br />Bạn có thực sự muốn làm điều này?",
"Ok" : "Đồng ý",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Thư mục dữ liệu và file của bạn có thể truy cập từ Internet. File .htaccess không hoạt động. Chúng tôi khuyến cáo bạn cấu hình web server của bạn sao cho thư mục dữ liệu (data folder) không thể truy câp được hoặc di chuyển thư mục data ra bên ngoài thư mục gốc (root) của Web Server.",
+ "Shared with {recipients}" : "Được chia sẻ với {recipients}",
"Error while unsharing" : "Lỗi trong quá trình gỡ chia sẻ",
"can reshare" : "Có thể chia sẻ lại",
"can edit" : "có thể chỉnh sửa",
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index e4c8086279b..7315f15805a 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP 请求头 \"Strict-Transport-Security\" 没有配置为至少 “{seconds}” 秒. 出于增强安全性考虑, 我们推荐按照<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>中的说明启用 HSTS.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "您正在通过 HTTP 访问该站点, 我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>中的说明配置服务器强制使用 HTTPS.",
"Shared" : "已共享",
- "Shared with {recipients}" : "由 {recipients} 分享",
"Error setting expiration date" : "设置过期日期时出错",
"The public link will expire no later than {days} days after it is created" : "该共享链接将在创建后 {days} 天失效",
"Set expiration date" : "设置过期日期",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密. 如果您没有启用恢复密钥, 当您的密码重置后没有任何方式能恢复您的数据. <br />如果您不确定, 请在继续前联系您的管理员.<br/>您是否真的要继续?",
"Ok" : "确定",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的数据目录和文件可从互联网被访问. .htaccess 文件没有工作. 我们强烈建议您在 Web 服务器上配置不可以访问数据目录, 或者将数据目录移动到 Web 服务器根目录之外.",
+ "Shared with {recipients}" : "由 {recipients} 分享",
"Error while unsharing" : "取消共享时出错",
"can reshare" : "允许重新分享",
"can edit" : "允许修改",
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index 16bb351e7c8..d70231d6778 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "HTTP 请求头 \"Strict-Transport-Security\" 没有配置为至少 “{seconds}” 秒. 出于增强安全性考虑, 我们推荐按照<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>中的说明启用 HSTS.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "您正在通过 HTTP 访问该站点, 我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>中的说明配置服务器强制使用 HTTPS.",
"Shared" : "已共享",
- "Shared with {recipients}" : "由 {recipients} 分享",
"Error setting expiration date" : "设置过期日期时出错",
"The public link will expire no later than {days} days after it is created" : "该共享链接将在创建后 {days} 天失效",
"Set expiration date" : "设置过期日期",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的文件已经加密. 如果您没有启用恢复密钥, 当您的密码重置后没有任何方式能恢复您的数据. <br />如果您不确定, 请在继续前联系您的管理员.<br/>您是否真的要继续?",
"Ok" : "确定",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的数据目录和文件可从互联网被访问. .htaccess 文件没有工作. 我们强烈建议您在 Web 服务器上配置不可以访问数据目录, 或者将数据目录移动到 Web 服务器根目录之外.",
+ "Shared with {recipients}" : "由 {recipients} 分享",
"Error while unsharing" : "取消共享时出错",
"can reshare" : "允许重新分享",
"can edit" : "允许修改",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 325899d7ddf..9bdccb67665 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -125,7 +125,6 @@ OC.L10N.register(
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "此 HTTP \"Strict-Transport-Security\" 標頭並未設定持續至少 {seconds} 秒。為了提高安全性,我們在<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>中有詳述並建議啟用 HSTS。",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "您正在藉由 HTTP 訪問此網站,如我們的<a href=\"{docUrl}\">安全性提示</a>所述,我們強烈建議設定您的伺服器須要求使用 HTTPS",
"Shared" : "已分享",
- "Shared with {recipients}" : "與 {recipients} 分享",
"Error setting expiration date" : "設定到期日發生錯誤",
"The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效",
"Set expiration date" : "指定到期日",
@@ -313,6 +312,7 @@ OC.L10N.register(
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
"Ok" : "好",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的資料目錄和檔案看來可以被公開存取,這表示 .htaccess 檔案並未生效,我們強烈建議您設定您的網頁伺服器,拒絕資料目錄的公開存取,或者將您的資料目錄移出網頁伺服器根目錄。",
+ "Shared with {recipients}" : "與 {recipients} 分享",
"Error while unsharing" : "取消分享時發生錯誤",
"can reshare" : "允許轉分享",
"can edit" : "可編輯",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 2a743232fef..38505bb766e 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -123,7 +123,6 @@
"The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "此 HTTP \"Strict-Transport-Security\" 標頭並未設定持續至少 {seconds} 秒。為了提高安全性,我們在<a href=\"{docUrl}\" rel=\"noreferrer\">安全提示</a>中有詳述並建議啟用 HSTS。",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "您正在藉由 HTTP 訪問此網站,如我們的<a href=\"{docUrl}\">安全性提示</a>所述,我們強烈建議設定您的伺服器須要求使用 HTTPS",
"Shared" : "已分享",
- "Shared with {recipients}" : "與 {recipients} 分享",
"Error setting expiration date" : "設定到期日發生錯誤",
"The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效",
"Set expiration date" : "指定到期日",
@@ -311,6 +310,7 @@
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
"Ok" : "好",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的資料目錄和檔案看來可以被公開存取,這表示 .htaccess 檔案並未生效,我們強烈建議您設定您的網頁伺服器,拒絕資料目錄的公開存取,或者將您的資料目錄移出網頁伺服器根目錄。",
+ "Shared with {recipients}" : "與 {recipients} 分享",
"Error while unsharing" : "取消分享時發生錯誤",
"can reshare" : "允許轉分享",
"can edit" : "可編輯",
diff --git a/core/routes.php b/core/routes.php
index af445d9da8f..bca62098b94 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -62,6 +62,8 @@ $application->registerRoutes($this, [
['name' => 'Js#getJs', 'url' => '/js/{appName}/{fileName}', 'verb' => 'GET'],
['name' => 'contactsMenu#index', 'url' => '/contactsmenu/contacts', 'verb' => 'POST'],
['name' => 'contactsMenu#findOne', 'url' => '/contactsmenu/findOne', 'verb' => 'POST'],
+ ['name' => 'AutoComplete#get', 'url' => 'autocomplete/get', 'verb' => 'GET'],
+ ['name' => 'WalledGarden#get', 'url' => '/204', 'verb' => 'GET'],
],
'ocs' => [
['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'],
diff --git a/core/templates/loginflow/authpicker.php b/core/templates/loginflow/authpicker.php
index 810c32b4f09..1858f8bcb62 100644
--- a/core/templates/loginflow/authpicker.php
+++ b/core/templates/loginflow/authpicker.php
@@ -40,7 +40,7 @@ $urlGenerator = $_['urlGenerator'];
<p id="redirect-link">
<a href="<?php p($urlGenerator->linkToRouteAbsolute('core.ClientFlowLogin.redirectPage', ['stateToken' => $_['stateToken'], 'clientIdentifier' => $_['clientIdentifier'], 'oauthState' => $_['oauthState']])) ?>">
- <input type="submit" class="login primary icon-confirm-white" value="<?php p('Grant access') ?>">
+ <input type="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Grant access')) ?>">
</a>
</p>
@@ -54,7 +54,7 @@ $urlGenerator = $_['urlGenerator'];
<label for="password" class="infield"><?php p($l->t('Password')) ?></label>
</p>
<input type="hidden" id="serverHost" value="<?php p($_['serverHost']) ?>" />
- <input id="submit-app-token-login" type="submit" class="login primary icon-confirm-white" value="<?php p('Grant access') ?>">
+ <input id="submit-app-token-login" type="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Grant access')) ?>">
</fieldset>
</div>
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index cea600bf59c..cfd52fd6dfc 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -68,6 +68,8 @@ return array(
'OCP\\BackgroundJob\\IJobList' => $baseDir . '/lib/public/BackgroundJob/IJobList.php',
'OCP\\Capabilities\\ICapability' => $baseDir . '/lib/public/Capabilities/ICapability.php',
'OCP\\Capabilities\\IPublicCapability' => $baseDir . '/lib/public/Capabilities/IPublicCapability.php',
+ 'OCP\\Collaboration\\AutoComplete\\IManager' => $baseDir . '/lib/public/Collaboration/AutoComplete/IManager.php',
+ 'OCP\\Collaboration\\AutoComplete\\ISorter' => $baseDir . '/lib/public/Collaboration/AutoComplete/ISorter.php',
'OCP\\Collaboration\\Collaborators\\ISearch' => $baseDir . '/lib/public/Collaboration/Collaborators/ISearch.php',
'OCP\\Collaboration\\Collaborators\\ISearchPlugin' => $baseDir . '/lib/public/Collaboration/Collaborators/ISearchPlugin.php',
'OCP\\Collaboration\\Collaborators\\ISearchResult' => $baseDir . '/lib/public/Collaboration/Collaborators/ISearchResult.php',
@@ -224,6 +226,7 @@ return array(
'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => $baseDir . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Mail\\IAttachment' => $baseDir . '/lib/public/Mail/IAttachment.php',
'OCP\\Mail\\IEMailTemplate' => $baseDir . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php',
'OCP\\Mail\\IMessage' => $baseDir . '/lib/public/Mail/IMessage.php',
@@ -389,6 +392,7 @@ return array(
'OC\\Cache\\CappedMemoryCache' => $baseDir . '/lib/private/Cache/CappedMemoryCache.php',
'OC\\Cache\\File' => $baseDir . '/lib/private/Cache/File.php',
'OC\\CapabilitiesManager' => $baseDir . '/lib/private/CapabilitiesManager.php',
+ 'OC\\Collaboration\\AutoComplete\\Manager' => $baseDir . '/lib/private/Collaboration/AutoComplete/Manager.php',
'OC\\Collaboration\\Collaborators\\GroupPlugin' => $baseDir . '/lib/private/Collaboration/Collaborators/GroupPlugin.php',
'OC\\Collaboration\\Collaborators\\LookupPlugin' => $baseDir . '/lib/private/Collaboration/Collaborators/LookupPlugin.php',
'OC\\Collaboration\\Collaborators\\MailPlugin' => $baseDir . '/lib/private/Collaboration/Collaborators/MailPlugin.php',
@@ -494,6 +498,7 @@ return array(
'OC\\Core\\Command\\User\\Report' => $baseDir . '/core/Command/User/Report.php',
'OC\\Core\\Command\\User\\ResetPassword' => $baseDir . '/core/Command/User/ResetPassword.php',
'OC\\Core\\Command\\User\\Setting' => $baseDir . '/core/Command/User/Setting.php',
+ 'OC\\Core\\Controller\\AutoCompleteController' => $baseDir . '/core/Controller/AutoCompleteController.php',
'OC\\Core\\Controller\\AvatarController' => $baseDir . '/core/Controller/AvatarController.php',
'OC\\Core\\Controller\\ClientFlowLoginController' => $baseDir . '/core/Controller/ClientFlowLoginController.php',
'OC\\Core\\Controller\\ContactsMenuController' => $baseDir . '/core/Controller/ContactsMenuController.php',
@@ -507,6 +512,7 @@ return array(
'OC\\Core\\Controller\\SetupController' => $baseDir . '/core/Controller/SetupController.php',
'OC\\Core\\Controller\\TwoFactorChallengeController' => $baseDir . '/core/Controller/TwoFactorChallengeController.php',
'OC\\Core\\Controller\\UserController' => $baseDir . '/core/Controller/UserController.php',
+ 'OC\\Core\\Controller\\WalledGardenController' => $baseDir . '/core/Controller/WalledGardenController.php',
'OC\\Core\\Middleware\\TwoFactorMiddleware' => $baseDir . '/core/Middleware/TwoFactorMiddleware.php',
'OC\\Core\\Migrations\\Version13000Date20170705121758' => $baseDir . '/core/Migrations/Version13000Date20170705121758.php',
'OC\\Core\\Migrations\\Version13000Date20170718121200' => $baseDir . '/core/Migrations/Version13000Date20170718121200.php',
@@ -528,7 +534,6 @@ return array(
'OC\\DB\\Migrator' => $baseDir . '/lib/private/DB/Migrator.php',
'OC\\DB\\MySQLMigrator' => $baseDir . '/lib/private/DB/MySQLMigrator.php',
'OC\\DB\\MySqlTools' => $baseDir . '/lib/private/DB/MySqlTools.php',
- 'OC\\DB\\NoCheckMigrator' => $baseDir . '/lib/private/DB/NoCheckMigrator.php',
'OC\\DB\\OCPostgreSqlPlatform' => $baseDir . '/lib/private/DB/OCPostgreSqlPlatform.php',
'OC\\DB\\OCSqlitePlatform' => $baseDir . '/lib/private/DB/OCSqlitePlatform.php',
'OC\\DB\\OracleConnection' => $baseDir . '/lib/private/DB/OracleConnection.php',
@@ -706,6 +711,7 @@ return array(
'OC\\Log\\File' => $baseDir . '/lib/private/Log/File.php',
'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php',
+ 'OC\\Mail\\Attachment' => $baseDir . '/lib/private/Mail/Attachment.php',
'OC\\Mail\\EMailTemplate' => $baseDir . '/lib/private/Mail/EMailTemplate.php',
'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => $baseDir . '/lib/private/Mail/Message.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index f476777e667..675219c0126 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -98,6 +98,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\BackgroundJob\\IJobList' => __DIR__ . '/../../..' . '/lib/public/BackgroundJob/IJobList.php',
'OCP\\Capabilities\\ICapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/ICapability.php',
'OCP\\Capabilities\\IPublicCapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/IPublicCapability.php',
+ 'OCP\\Collaboration\\AutoComplete\\IManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/IManager.php',
+ 'OCP\\Collaboration\\AutoComplete\\ISorter' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/ISorter.php',
'OCP\\Collaboration\\Collaborators\\ISearch' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Collaborators/ISearch.php',
'OCP\\Collaboration\\Collaborators\\ISearchPlugin' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Collaborators/ISearchPlugin.php',
'OCP\\Collaboration\\Collaborators\\ISearchResult' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Collaborators/ISearchResult.php',
@@ -254,6 +256,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => __DIR__ . '/../../..' . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Mail\\IAttachment' => __DIR__ . '/../../..' . '/lib/public/Mail/IAttachment.php',
'OCP\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php',
'OCP\\Mail\\IMessage' => __DIR__ . '/../../..' . '/lib/public/Mail/IMessage.php',
@@ -419,6 +422,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Cache\\CappedMemoryCache' => __DIR__ . '/../../..' . '/lib/private/Cache/CappedMemoryCache.php',
'OC\\Cache\\File' => __DIR__ . '/../../..' . '/lib/private/Cache/File.php',
'OC\\CapabilitiesManager' => __DIR__ . '/../../..' . '/lib/private/CapabilitiesManager.php',
+ 'OC\\Collaboration\\AutoComplete\\Manager' => __DIR__ . '/../../..' . '/lib/private/Collaboration/AutoComplete/Manager.php',
'OC\\Collaboration\\Collaborators\\GroupPlugin' => __DIR__ . '/../../..' . '/lib/private/Collaboration/Collaborators/GroupPlugin.php',
'OC\\Collaboration\\Collaborators\\LookupPlugin' => __DIR__ . '/../../..' . '/lib/private/Collaboration/Collaborators/LookupPlugin.php',
'OC\\Collaboration\\Collaborators\\MailPlugin' => __DIR__ . '/../../..' . '/lib/private/Collaboration/Collaborators/MailPlugin.php',
@@ -524,6 +528,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Core\\Command\\User\\Report' => __DIR__ . '/../../..' . '/core/Command/User/Report.php',
'OC\\Core\\Command\\User\\ResetPassword' => __DIR__ . '/../../..' . '/core/Command/User/ResetPassword.php',
'OC\\Core\\Command\\User\\Setting' => __DIR__ . '/../../..' . '/core/Command/User/Setting.php',
+ 'OC\\Core\\Controller\\AutoCompleteController' => __DIR__ . '/../../..' . '/core/Controller/AutoCompleteController.php',
'OC\\Core\\Controller\\AvatarController' => __DIR__ . '/../../..' . '/core/Controller/AvatarController.php',
'OC\\Core\\Controller\\ClientFlowLoginController' => __DIR__ . '/../../..' . '/core/Controller/ClientFlowLoginController.php',
'OC\\Core\\Controller\\ContactsMenuController' => __DIR__ . '/../../..' . '/core/Controller/ContactsMenuController.php',
@@ -537,6 +542,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Core\\Controller\\SetupController' => __DIR__ . '/../../..' . '/core/Controller/SetupController.php',
'OC\\Core\\Controller\\TwoFactorChallengeController' => __DIR__ . '/../../..' . '/core/Controller/TwoFactorChallengeController.php',
'OC\\Core\\Controller\\UserController' => __DIR__ . '/../../..' . '/core/Controller/UserController.php',
+ 'OC\\Core\\Controller\\WalledGardenController' => __DIR__ . '/../../..' . '/core/Controller/WalledGardenController.php',
'OC\\Core\\Middleware\\TwoFactorMiddleware' => __DIR__ . '/../../..' . '/core/Middleware/TwoFactorMiddleware.php',
'OC\\Core\\Migrations\\Version13000Date20170705121758' => __DIR__ . '/../../..' . '/core/Migrations/Version13000Date20170705121758.php',
'OC\\Core\\Migrations\\Version13000Date20170718121200' => __DIR__ . '/../../..' . '/core/Migrations/Version13000Date20170718121200.php',
@@ -558,7 +564,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\DB\\Migrator' => __DIR__ . '/../../..' . '/lib/private/DB/Migrator.php',
'OC\\DB\\MySQLMigrator' => __DIR__ . '/../../..' . '/lib/private/DB/MySQLMigrator.php',
'OC\\DB\\MySqlTools' => __DIR__ . '/../../..' . '/lib/private/DB/MySqlTools.php',
- 'OC\\DB\\NoCheckMigrator' => __DIR__ . '/../../..' . '/lib/private/DB/NoCheckMigrator.php',
'OC\\DB\\OCPostgreSqlPlatform' => __DIR__ . '/../../..' . '/lib/private/DB/OCPostgreSqlPlatform.php',
'OC\\DB\\OCSqlitePlatform' => __DIR__ . '/../../..' . '/lib/private/DB/OCSqlitePlatform.php',
'OC\\DB\\OracleConnection' => __DIR__ . '/../../..' . '/lib/private/DB/OracleConnection.php',
@@ -736,6 +741,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Log\\File' => __DIR__ . '/../../..' . '/lib/private/Log/File.php',
'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php',
+ 'OC\\Mail\\Attachment' => __DIR__ . '/../../..' . '/lib/private/Mail/Attachment.php',
'OC\\Mail\\EMailTemplate' => __DIR__ . '/../../..' . '/lib/private/Mail/EMailTemplate.php',
'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => __DIR__ . '/../../..' . '/lib/private/Mail/Message.php',
diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js
index a169502af15..4713820e242 100644
--- a/lib/l10n/en_GB.js
+++ b/lib/l10n/en_GB.js
@@ -31,14 +31,23 @@ OC.L10N.register(
"Invalid image" : "Invalid image",
"Avatar image is not square" : "Avatar image is not square",
"today" : "today",
+ "tomorrow" : "tomorrow",
"yesterday" : "yesterday",
+ "_in %n day_::_in %n days_" : ["in %n day","in %n days"],
"_%n day ago_::_%n days ago_" : ["%n day ago","%n days ago"],
+ "next month" : "next month",
"last month" : "last month",
+ "_in %n month_::_in %n months_" : ["in %n month","in %n months"],
"_%n month ago_::_%n months ago_" : ["%n month ago","%n months ago"],
+ "next year" : "next year",
"last year" : "last year",
+ "_in %n year_::_in %n years_" : ["in %n year","in %n years"],
"_%n year ago_::_%n years ago_" : ["%n year ago","%n years ago"],
+ "_in %n hour_::_in %n hours_" : ["in %n hour","in %n hours"],
"_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
+ "_in %n minute_::_in %n minutes_" : ["in %n minute","in %n minutes"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
+ "in a few seconds" : "in a few seconds",
"seconds ago" : "seconds ago",
"Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.",
"File name is a reserved word" : "File name is a reserved word",
diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json
index bf08239be71..01590dbb688 100644
--- a/lib/l10n/en_GB.json
+++ b/lib/l10n/en_GB.json
@@ -29,14 +29,23 @@
"Invalid image" : "Invalid image",
"Avatar image is not square" : "Avatar image is not square",
"today" : "today",
+ "tomorrow" : "tomorrow",
"yesterday" : "yesterday",
+ "_in %n day_::_in %n days_" : ["in %n day","in %n days"],
"_%n day ago_::_%n days ago_" : ["%n day ago","%n days ago"],
+ "next month" : "next month",
"last month" : "last month",
+ "_in %n month_::_in %n months_" : ["in %n month","in %n months"],
"_%n month ago_::_%n months ago_" : ["%n month ago","%n months ago"],
+ "next year" : "next year",
"last year" : "last year",
+ "_in %n year_::_in %n years_" : ["in %n year","in %n years"],
"_%n year ago_::_%n years ago_" : ["%n year ago","%n years ago"],
+ "_in %n hour_::_in %n hours_" : ["in %n hour","in %n hours"],
"_%n hour ago_::_%n hours ago_" : ["%n hour ago","%n hours ago"],
+ "_in %n minute_::_in %n minutes_" : ["in %n minute","in %n minutes"],
"_%n minute ago_::_%n minutes ago_" : ["%n minute ago","%n minutes ago"],
+ "in a few seconds" : "in a few seconds",
"seconds ago" : "seconds ago",
"Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.",
"File name is a reserved word" : "File name is a reserved word",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 77f5b012227..5a50a527131 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -31,14 +31,23 @@ OC.L10N.register(
"Invalid image" : "Imagen inválida",
"Avatar image is not square" : "La imagen de avatar no es cuadrada",
"today" : "hoy",
+ "tomorrow" : "mañana",
"yesterday" : "ayer",
+ "_in %n day_::_in %n days_" : ["dentro de %n día","dentro de %n días"],
"_%n day ago_::_%n days ago_" : ["Hace %n día","hace %n días"],
+ "next month" : "mes siguiente",
"last month" : "mes pasado",
+ "_in %n month_::_in %n months_" : ["dentro de %n mes","dentro de %n meses"],
"_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "next year" : "año que viene",
"last year" : "año pasado",
+ "_in %n year_::_in %n years_" : ["dentro de %n año","dentro de %n años"],
"_%n year ago_::_%n years ago_" : ["Hace %n año","hace %n años"],
+ "_in %n hour_::_in %n hours_" : ["dentro de %n hora","dentro de %n horas"],
"_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_in %n minute_::_in %n minutes_" : ["dentro de %n minuto","dentro de %n minutos"],
"_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "in a few seconds" : "en unos segundos",
"seconds ago" : "hace segundos",
"Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID %s no existe. Por favor, actívalo en la configuración de apps o contacta con tu administrador.",
"File name is a reserved word" : "El nombre de archivo es una palabra reservada",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 169b40173ce..c8ec965fcfe 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -29,14 +29,23 @@
"Invalid image" : "Imagen inválida",
"Avatar image is not square" : "La imagen de avatar no es cuadrada",
"today" : "hoy",
+ "tomorrow" : "mañana",
"yesterday" : "ayer",
+ "_in %n day_::_in %n days_" : ["dentro de %n día","dentro de %n días"],
"_%n day ago_::_%n days ago_" : ["Hace %n día","hace %n días"],
+ "next month" : "mes siguiente",
"last month" : "mes pasado",
+ "_in %n month_::_in %n months_" : ["dentro de %n mes","dentro de %n meses"],
"_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "next year" : "año que viene",
"last year" : "año pasado",
+ "_in %n year_::_in %n years_" : ["dentro de %n año","dentro de %n años"],
"_%n year ago_::_%n years ago_" : ["Hace %n año","hace %n años"],
+ "_in %n hour_::_in %n hours_" : ["dentro de %n hora","dentro de %n horas"],
"_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_in %n minute_::_in %n minutes_" : ["dentro de %n minuto","dentro de %n minutos"],
"_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "in a few seconds" : "en unos segundos",
"seconds ago" : "hace segundos",
"Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID %s no existe. Por favor, actívalo en la configuración de apps o contacta con tu administrador.",
"File name is a reserved word" : "El nombre de archivo es una palabra reservada",
diff --git a/lib/l10n/es_CR.js b/lib/l10n/es_CR.js
new file mode 100644
index 00000000000..89acfdc93fe
--- /dev/null
+++ b/lib/l10n/es_CR.js
@@ -0,0 +1,259 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto generalmente se resuelve dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio config. Por favor ve %s",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Por favor asegúrarte de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede arruiniar tu instalacón y no está soportado. Por favor lee la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "Education Edition" : "Edición Educativa",
+ "Enterprise bundle" : "Paquete empresarial",
+ "Groupware bundle" : "Paquete de Groupware",
+ "Social sharing bundle" : "Paquete para compartir en redes sociales",
+ "PHP %s or higher is required." : "Se requiere de PHP %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "The library %s is not available." : "La biblioteca %s no está disponible. ",
+ "Library %s with a version higher than %s is required - available version %s." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "tomorrow" : "mañana",
+ "yesterday" : "ayer",
+ "_in %n day_::_in %n days_" : ["en %n día","en %n días"],
+ "_%n day ago_::_%n days ago_" : ["hace %n día","hace %n días"],
+ "next month" : "próximo mes",
+ "last month" : "mes pasado",
+ "_in %n month_::_in %n months_" : ["en %n mes","en %n meses"],
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "next year" : "próximo año",
+ "last year" : "año pasado",
+ "_in %n year_::_in %n years_" : ["en %n año","en %n años"],
+ "_%n year ago_::_%n years ago_" : ["hace %n año","hace %n años"],
+ "_in %n hour_::_in %n hours_" : ["en %n hora","en %n horas"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_in %n minute_::_in %n minutes_" : ["en %n minuto","en %n minutos"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "in a few seconds" : "en algunos segundos",
+ "seconds ago" : "hace segundos",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID: %sno existe. Por favor hablíitalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Dot files are not allowed" : "Los archivos Dot no están permitidos",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no lo contestes. ",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Settings" : "Configuraciones",
+ "Log out" : "Salir",
+ "Users" : "Usuarios",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Basic settings" : "Configuraciones básicas",
+ "Sharing" : "Compartiendo",
+ "Security" : "Seguridad",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Configuraciones adicionales",
+ "Tips & tricks" : "Consejos & trucos",
+ "Personal info" : "Información personal",
+ "Sync clients" : "Sincronizar clientes",
+ "Unlimited" : "Ilimitado",
+ "__language_name__" : "Español (México)",
+ "Verifying" : "Verficando",
+ "Verifying …" : "Verficando ...",
+ "Verify" : "Verificar",
+ "%s enter the database username and name." : "%s ingresa el usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresa el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puedes utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "Usuario y/o contraseña de Oracle inválidos",
+ "PostgreSQL username and/or password not valid" : "El Usuario y/o Contraseña de PostgreSQL inválido(s)",
+ "You need to enter details of an existing account." : "Necesitas ingresar los detalles de una cuenta existente.",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Úsalo bajo tu propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, por favor cosidera usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor elimina el ajuste open_basedir de tu archivo php.ini o cambia a PHP de 64 bits. ",
+ "Set an admin username." : "Establecer un Usuario administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "Given database host is invalid and must not contain the port: %s" : "El servidor de base de datos ingresado es inválido y no debe contener el puerto: %s",
+ "Invalid Federated Cloud ID" : "ID Inválido",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Se presentó una falla al compartir %s porque el archivo no existe",
+ "You are not allowed to share %s" : "No tienes permitido compartir %s",
+ "Sharing %s failed, because you can not share with yourself" : "Se presentó una falla al compartir %s, porque no puedes compartir contigo mismo",
+ "Sharing %s failed, because the user %s does not exist" : "Se presentó una falla al compartir %s porque el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se presentó una falla al compartir %s porque el usuario %s no es un miembro de ninguno de los grupos de los cuales %s es miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya había sido compartido con %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con el usuario %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se presentó una falla al compartir %s, porque el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Necesitas proporcionar una contraseña para crear una liga pública, sólo se permiten ligas protegidas. ",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se presentó una falla al compartir %s porque no está permitido compartir con ligas",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elemento compartido con el mismo usuario",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor sea inalcanzable por el momento",
+ "Share type %s is not valid for %s" : "El tipo del elemento compartido %s no es válido para %s",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El backend %s que comparte debe implementar la interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "No fue encontrado el Backend que comparte %s ",
+ "Sharing backend for %s not found" : "No fue encontrado el Backend que comparte para %s",
+ "Sharing failed, because the user %s is the original sharer" : "Se presentó una falla al compartir, porque el usuario %s es quien compartió originalmente",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al compartir %s, porque los permisos exceden los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se presentó una falla al compartir %s porque el backend que comparte %s no pudo encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se presentó una falla al compartir %s porque el archivo no se encontró en el caché de archivos",
+ "Can’t increase permissions of %s" : "No es posible incrementar los privilegios de %s",
+ "Files can’t be shared with delete permissions" : "Los archivos no se pueden compartir con permisos de borrado",
+ "Files can’t be shared with create permissions" : "Los archivos no se pueden compartir con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración se encuentra en el pasado",
+ "Can’t set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s compartió contigo »%s«.",
+ "Click the button below to open it." : "Haz click en el botón inferior para abrirlo. ",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s por %s",
+ "The requested share does not exist anymore" : "El recurso compartido solicitado ya no existe",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Debes proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El usuario contiene un espacio en blanco al inicio o al final",
+ "Username must not consist of dots only" : "El usuario no debe consistir de solo puntos. ",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese usuario ya está en uso",
+ "Could not create user" : "No fue posible crear el usuario",
+ "User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no pudo ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, por favor intentalo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "La ficha ha expirado. Por favor recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuentas con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"",
+ "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio de las aplicaciones o deshabilitando la appstore en el archivo config. Por favor ve %s",
+ "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"",
+ "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s",
+ "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Por lo general los permisos se pueden corregir al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Por favor instala uno de las siguientes configuraciones locales en tu sistema y reinicia tu servidor web",
+ "Please ask your server administrator to install the module." : "Por favor solicita a tu adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corregir este tema, establece <code>mbstring.func_overload</code> a <code>0</code> en tu archivo php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s está instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, por favor actualiza la versión de su libxml2 y reinicia tu servidor web. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor solicita al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Por favor actualiza tu versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambia los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Your data directory is readable by other users" : "Tu direcctorio data puede ser leído por otros usuarios",
+ "Your data directory must be an absolute path" : "Tu directorio data debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifica el valor de \"datadirectory\" en tu configuración",
+ "Your data directory is invalid" : "Tu directorio de datos es inválido",
+ "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Asegurate de que exista una archivo llamado \".ocdata\" en la raíz del directorio de datos. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Por favor habilítalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "Server settings" : "Configuraciones del servidor",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Necesitas ingresar una cuenta ya existente o la del administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre: %s, contraseña: %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible borrar la fecha de expiración. Los elelentos compartidos deben tener una fecha de expiración.",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Personal" : "Personal",
+ "Admin" : "Administración",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio de \"datos\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor verifica que el directorio de datos tenga un archivo \".ocdata\" en su raíz. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_CR.json b/lib/l10n/es_CR.json
new file mode 100644
index 00000000000..0b6be27dfb5
--- /dev/null
+++ b/lib/l10n/es_CR.json
@@ -0,0 +1,257 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto generalmente se resuelve dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio config. Por favor ve %s",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Por favor asegúrarte de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede arruiniar tu instalacón y no está soportado. Por favor lee la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "Education Edition" : "Edición Educativa",
+ "Enterprise bundle" : "Paquete empresarial",
+ "Groupware bundle" : "Paquete de Groupware",
+ "Social sharing bundle" : "Paquete para compartir en redes sociales",
+ "PHP %s or higher is required." : "Se requiere de PHP %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "The library %s is not available." : "La biblioteca %s no está disponible. ",
+ "Library %s with a version higher than %s is required - available version %s." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "tomorrow" : "mañana",
+ "yesterday" : "ayer",
+ "_in %n day_::_in %n days_" : ["en %n día","en %n días"],
+ "_%n day ago_::_%n days ago_" : ["hace %n día","hace %n días"],
+ "next month" : "próximo mes",
+ "last month" : "mes pasado",
+ "_in %n month_::_in %n months_" : ["en %n mes","en %n meses"],
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "next year" : "próximo año",
+ "last year" : "año pasado",
+ "_in %n year_::_in %n years_" : ["en %n año","en %n años"],
+ "_%n year ago_::_%n years ago_" : ["hace %n año","hace %n años"],
+ "_in %n hour_::_in %n hours_" : ["en %n hora","en %n horas"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_in %n minute_::_in %n minutes_" : ["en %n minuto","en %n minutos"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "in a few seconds" : "en algunos segundos",
+ "seconds ago" : "hace segundos",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID: %sno existe. Por favor hablíitalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Dot files are not allowed" : "Los archivos Dot no están permitidos",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no lo contestes. ",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Settings" : "Configuraciones",
+ "Log out" : "Salir",
+ "Users" : "Usuarios",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Basic settings" : "Configuraciones básicas",
+ "Sharing" : "Compartiendo",
+ "Security" : "Seguridad",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Configuraciones adicionales",
+ "Tips & tricks" : "Consejos & trucos",
+ "Personal info" : "Información personal",
+ "Sync clients" : "Sincronizar clientes",
+ "Unlimited" : "Ilimitado",
+ "__language_name__" : "Español (México)",
+ "Verifying" : "Verficando",
+ "Verifying …" : "Verficando ...",
+ "Verify" : "Verificar",
+ "%s enter the database username and name." : "%s ingresa el usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresa el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puedes utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "Usuario y/o contraseña de Oracle inválidos",
+ "PostgreSQL username and/or password not valid" : "El Usuario y/o Contraseña de PostgreSQL inválido(s)",
+ "You need to enter details of an existing account." : "Necesitas ingresar los detalles de una cuenta existente.",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Úsalo bajo tu propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, por favor cosidera usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor elimina el ajuste open_basedir de tu archivo php.ini o cambia a PHP de 64 bits. ",
+ "Set an admin username." : "Establecer un Usuario administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "Given database host is invalid and must not contain the port: %s" : "El servidor de base de datos ingresado es inválido y no debe contener el puerto: %s",
+ "Invalid Federated Cloud ID" : "ID Inválido",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Se presentó una falla al compartir %s porque el archivo no existe",
+ "You are not allowed to share %s" : "No tienes permitido compartir %s",
+ "Sharing %s failed, because you can not share with yourself" : "Se presentó una falla al compartir %s, porque no puedes compartir contigo mismo",
+ "Sharing %s failed, because the user %s does not exist" : "Se presentó una falla al compartir %s porque el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se presentó una falla al compartir %s porque el usuario %s no es un miembro de ninguno de los grupos de los cuales %s es miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya había sido compartido con %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con el usuario %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se presentó una falla al compartir %s, porque el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Necesitas proporcionar una contraseña para crear una liga pública, sólo se permiten ligas protegidas. ",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se presentó una falla al compartir %s porque no está permitido compartir con ligas",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elemento compartido con el mismo usuario",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor sea inalcanzable por el momento",
+ "Share type %s is not valid for %s" : "El tipo del elemento compartido %s no es válido para %s",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El backend %s que comparte debe implementar la interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "No fue encontrado el Backend que comparte %s ",
+ "Sharing backend for %s not found" : "No fue encontrado el Backend que comparte para %s",
+ "Sharing failed, because the user %s is the original sharer" : "Se presentó una falla al compartir, porque el usuario %s es quien compartió originalmente",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al compartir %s, porque los permisos exceden los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se presentó una falla al compartir %s porque el backend que comparte %s no pudo encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se presentó una falla al compartir %s porque el archivo no se encontró en el caché de archivos",
+ "Can’t increase permissions of %s" : "No es posible incrementar los privilegios de %s",
+ "Files can’t be shared with delete permissions" : "Los archivos no se pueden compartir con permisos de borrado",
+ "Files can’t be shared with create permissions" : "Los archivos no se pueden compartir con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración se encuentra en el pasado",
+ "Can’t set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s compartió contigo »%s«.",
+ "Click the button below to open it." : "Haz click en el botón inferior para abrirlo. ",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s por %s",
+ "The requested share does not exist anymore" : "El recurso compartido solicitado ya no existe",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Debes proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El usuario contiene un espacio en blanco al inicio o al final",
+ "Username must not consist of dots only" : "El usuario no debe consistir de solo puntos. ",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese usuario ya está en uso",
+ "Could not create user" : "No fue posible crear el usuario",
+ "User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no pudo ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, por favor intentalo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "La ficha ha expirado. Por favor recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuentas con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"",
+ "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio de las aplicaciones o deshabilitando la appstore en el archivo config. Por favor ve %s",
+ "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"",
+ "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s",
+ "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Por lo general los permisos se pueden corregir al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Por favor instala uno de las siguientes configuraciones locales en tu sistema y reinicia tu servidor web",
+ "Please ask your server administrator to install the module." : "Por favor solicita a tu adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corregir este tema, establece <code>mbstring.func_overload</code> a <code>0</code> en tu archivo php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s está instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, por favor actualiza la versión de su libxml2 y reinicia tu servidor web. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor solicita al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Por favor actualiza tu versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambia los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Your data directory is readable by other users" : "Tu direcctorio data puede ser leído por otros usuarios",
+ "Your data directory must be an absolute path" : "Tu directorio data debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifica el valor de \"datadirectory\" en tu configuración",
+ "Your data directory is invalid" : "Tu directorio de datos es inválido",
+ "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Asegurate de que exista una archivo llamado \".ocdata\" en la raíz del directorio de datos. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Por favor habilítalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "Server settings" : "Configuraciones del servidor",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Necesitas ingresar una cuenta ya existente o la del administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre: %s, contraseña: %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible borrar la fecha de expiración. Los elelentos compartidos deben tener una fecha de expiración.",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Personal" : "Personal",
+ "Admin" : "Administración",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio de \"datos\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor verifica que el directorio de datos tenga un archivo \".ocdata\" en su raíz. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/es_DO.js b/lib/l10n/es_DO.js
new file mode 100644
index 00000000000..89acfdc93fe
--- /dev/null
+++ b/lib/l10n/es_DO.js
@@ -0,0 +1,259 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto generalmente se resuelve dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio config. Por favor ve %s",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Por favor asegúrarte de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede arruiniar tu instalacón y no está soportado. Por favor lee la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "Education Edition" : "Edición Educativa",
+ "Enterprise bundle" : "Paquete empresarial",
+ "Groupware bundle" : "Paquete de Groupware",
+ "Social sharing bundle" : "Paquete para compartir en redes sociales",
+ "PHP %s or higher is required." : "Se requiere de PHP %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "The library %s is not available." : "La biblioteca %s no está disponible. ",
+ "Library %s with a version higher than %s is required - available version %s." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "tomorrow" : "mañana",
+ "yesterday" : "ayer",
+ "_in %n day_::_in %n days_" : ["en %n día","en %n días"],
+ "_%n day ago_::_%n days ago_" : ["hace %n día","hace %n días"],
+ "next month" : "próximo mes",
+ "last month" : "mes pasado",
+ "_in %n month_::_in %n months_" : ["en %n mes","en %n meses"],
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "next year" : "próximo año",
+ "last year" : "año pasado",
+ "_in %n year_::_in %n years_" : ["en %n año","en %n años"],
+ "_%n year ago_::_%n years ago_" : ["hace %n año","hace %n años"],
+ "_in %n hour_::_in %n hours_" : ["en %n hora","en %n horas"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_in %n minute_::_in %n minutes_" : ["en %n minuto","en %n minutos"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "in a few seconds" : "en algunos segundos",
+ "seconds ago" : "hace segundos",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID: %sno existe. Por favor hablíitalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Dot files are not allowed" : "Los archivos Dot no están permitidos",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no lo contestes. ",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Settings" : "Configuraciones",
+ "Log out" : "Salir",
+ "Users" : "Usuarios",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Basic settings" : "Configuraciones básicas",
+ "Sharing" : "Compartiendo",
+ "Security" : "Seguridad",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Configuraciones adicionales",
+ "Tips & tricks" : "Consejos & trucos",
+ "Personal info" : "Información personal",
+ "Sync clients" : "Sincronizar clientes",
+ "Unlimited" : "Ilimitado",
+ "__language_name__" : "Español (México)",
+ "Verifying" : "Verficando",
+ "Verifying …" : "Verficando ...",
+ "Verify" : "Verificar",
+ "%s enter the database username and name." : "%s ingresa el usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresa el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puedes utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "Usuario y/o contraseña de Oracle inválidos",
+ "PostgreSQL username and/or password not valid" : "El Usuario y/o Contraseña de PostgreSQL inválido(s)",
+ "You need to enter details of an existing account." : "Necesitas ingresar los detalles de una cuenta existente.",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Úsalo bajo tu propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, por favor cosidera usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor elimina el ajuste open_basedir de tu archivo php.ini o cambia a PHP de 64 bits. ",
+ "Set an admin username." : "Establecer un Usuario administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "Given database host is invalid and must not contain the port: %s" : "El servidor de base de datos ingresado es inválido y no debe contener el puerto: %s",
+ "Invalid Federated Cloud ID" : "ID Inválido",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Se presentó una falla al compartir %s porque el archivo no existe",
+ "You are not allowed to share %s" : "No tienes permitido compartir %s",
+ "Sharing %s failed, because you can not share with yourself" : "Se presentó una falla al compartir %s, porque no puedes compartir contigo mismo",
+ "Sharing %s failed, because the user %s does not exist" : "Se presentó una falla al compartir %s porque el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se presentó una falla al compartir %s porque el usuario %s no es un miembro de ninguno de los grupos de los cuales %s es miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya había sido compartido con %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con el usuario %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se presentó una falla al compartir %s, porque el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Necesitas proporcionar una contraseña para crear una liga pública, sólo se permiten ligas protegidas. ",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se presentó una falla al compartir %s porque no está permitido compartir con ligas",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elemento compartido con el mismo usuario",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor sea inalcanzable por el momento",
+ "Share type %s is not valid for %s" : "El tipo del elemento compartido %s no es válido para %s",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El backend %s que comparte debe implementar la interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "No fue encontrado el Backend que comparte %s ",
+ "Sharing backend for %s not found" : "No fue encontrado el Backend que comparte para %s",
+ "Sharing failed, because the user %s is the original sharer" : "Se presentó una falla al compartir, porque el usuario %s es quien compartió originalmente",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al compartir %s, porque los permisos exceden los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se presentó una falla al compartir %s porque el backend que comparte %s no pudo encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se presentó una falla al compartir %s porque el archivo no se encontró en el caché de archivos",
+ "Can’t increase permissions of %s" : "No es posible incrementar los privilegios de %s",
+ "Files can’t be shared with delete permissions" : "Los archivos no se pueden compartir con permisos de borrado",
+ "Files can’t be shared with create permissions" : "Los archivos no se pueden compartir con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración se encuentra en el pasado",
+ "Can’t set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s compartió contigo »%s«.",
+ "Click the button below to open it." : "Haz click en el botón inferior para abrirlo. ",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s por %s",
+ "The requested share does not exist anymore" : "El recurso compartido solicitado ya no existe",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Debes proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El usuario contiene un espacio en blanco al inicio o al final",
+ "Username must not consist of dots only" : "El usuario no debe consistir de solo puntos. ",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese usuario ya está en uso",
+ "Could not create user" : "No fue posible crear el usuario",
+ "User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no pudo ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, por favor intentalo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "La ficha ha expirado. Por favor recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuentas con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"",
+ "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio de las aplicaciones o deshabilitando la appstore en el archivo config. Por favor ve %s",
+ "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"",
+ "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s",
+ "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Por lo general los permisos se pueden corregir al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Por favor instala uno de las siguientes configuraciones locales en tu sistema y reinicia tu servidor web",
+ "Please ask your server administrator to install the module." : "Por favor solicita a tu adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corregir este tema, establece <code>mbstring.func_overload</code> a <code>0</code> en tu archivo php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s está instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, por favor actualiza la versión de su libxml2 y reinicia tu servidor web. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor solicita al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Por favor actualiza tu versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambia los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Your data directory is readable by other users" : "Tu direcctorio data puede ser leído por otros usuarios",
+ "Your data directory must be an absolute path" : "Tu directorio data debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifica el valor de \"datadirectory\" en tu configuración",
+ "Your data directory is invalid" : "Tu directorio de datos es inválido",
+ "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Asegurate de que exista una archivo llamado \".ocdata\" en la raíz del directorio de datos. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Por favor habilítalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "Server settings" : "Configuraciones del servidor",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Necesitas ingresar una cuenta ya existente o la del administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre: %s, contraseña: %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible borrar la fecha de expiración. Los elelentos compartidos deben tener una fecha de expiración.",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Personal" : "Personal",
+ "Admin" : "Administración",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio de \"datos\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor verifica que el directorio de datos tenga un archivo \".ocdata\" en su raíz. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_DO.json b/lib/l10n/es_DO.json
new file mode 100644
index 00000000000..0b6be27dfb5
--- /dev/null
+++ b/lib/l10n/es_DO.json
@@ -0,0 +1,257 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto generalmente se resuelve dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio config. Por favor ve %s",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Por favor asegúrarte de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede arruiniar tu instalacón y no está soportado. Por favor lee la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "Education Edition" : "Edición Educativa",
+ "Enterprise bundle" : "Paquete empresarial",
+ "Groupware bundle" : "Paquete de Groupware",
+ "Social sharing bundle" : "Paquete para compartir en redes sociales",
+ "PHP %s or higher is required." : "Se requiere de PHP %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "The library %s is not available." : "La biblioteca %s no está disponible. ",
+ "Library %s with a version higher than %s is required - available version %s." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "tomorrow" : "mañana",
+ "yesterday" : "ayer",
+ "_in %n day_::_in %n days_" : ["en %n día","en %n días"],
+ "_%n day ago_::_%n days ago_" : ["hace %n día","hace %n días"],
+ "next month" : "próximo mes",
+ "last month" : "mes pasado",
+ "_in %n month_::_in %n months_" : ["en %n mes","en %n meses"],
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "next year" : "próximo año",
+ "last year" : "año pasado",
+ "_in %n year_::_in %n years_" : ["en %n año","en %n años"],
+ "_%n year ago_::_%n years ago_" : ["hace %n año","hace %n años"],
+ "_in %n hour_::_in %n hours_" : ["en %n hora","en %n horas"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_in %n minute_::_in %n minutes_" : ["en %n minuto","en %n minutos"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "in a few seconds" : "en algunos segundos",
+ "seconds ago" : "hace segundos",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con ID: %sno existe. Por favor hablíitalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Dot files are not allowed" : "Los archivos Dot no están permitidos",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no lo contestes. ",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Settings" : "Configuraciones",
+ "Log out" : "Salir",
+ "Users" : "Usuarios",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Basic settings" : "Configuraciones básicas",
+ "Sharing" : "Compartiendo",
+ "Security" : "Seguridad",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Configuraciones adicionales",
+ "Tips & tricks" : "Consejos & trucos",
+ "Personal info" : "Información personal",
+ "Sync clients" : "Sincronizar clientes",
+ "Unlimited" : "Ilimitado",
+ "__language_name__" : "Español (México)",
+ "Verifying" : "Verficando",
+ "Verifying …" : "Verficando ...",
+ "Verify" : "Verificar",
+ "%s enter the database username and name." : "%s ingresa el usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresa el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puedes utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "Usuario y/o contraseña de Oracle inválidos",
+ "PostgreSQL username and/or password not valid" : "El Usuario y/o Contraseña de PostgreSQL inválido(s)",
+ "You need to enter details of an existing account." : "Necesitas ingresar los detalles de una cuenta existente.",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Úsalo bajo tu propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, por favor cosidera usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor elimina el ajuste open_basedir de tu archivo php.ini o cambia a PHP de 64 bits. ",
+ "Set an admin username." : "Establecer un Usuario administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "Given database host is invalid and must not contain the port: %s" : "El servidor de base de datos ingresado es inválido y no debe contener el puerto: %s",
+ "Invalid Federated Cloud ID" : "ID Inválido",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Se presentó una falla al compartir %s, porque el backend no permite elementos compartidos de tipo %i",
+ "Sharing %s failed, because the file does not exist" : "Se presentó una falla al compartir %s porque el archivo no existe",
+ "You are not allowed to share %s" : "No tienes permitido compartir %s",
+ "Sharing %s failed, because you can not share with yourself" : "Se presentó una falla al compartir %s, porque no puedes compartir contigo mismo",
+ "Sharing %s failed, because the user %s does not exist" : "Se presentó una falla al compartir %s porque el usuario %s no existe",
+ "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se presentó una falla al compartir %s porque el usuario %s no es un miembro de ninguno de los grupos de los cuales %s es miembro",
+ "Sharing %s failed, because this item is already shared with %s" : "Se presentó una falla al compartir %s, porque este elemento ya había sido compartido con %s",
+ "Sharing %s failed, because this item is already shared with user %s" : "Se presento una falla al compartir %s, porque este elemento ya ha sido compartido con el usuario %s",
+ "Sharing %s failed, because the group %s does not exist" : "Se presentó una falla al compartir %s, porque el grupo %s no existe",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Necesitas proporcionar una contraseña para crear una liga pública, sólo se permiten ligas protegidas. ",
+ "Sharing %s failed, because sharing with links is not allowed" : "Se presentó una falla al compartir %s porque no está permitido compartir con ligas",
+ "Not allowed to create a federated share with the same user" : "No está permitido crear un elemento compartido con el mismo usuario",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se presentó una falla al compartir %s, no fue posible encontrar %s, tal vez el servidor sea inalcanzable por el momento",
+ "Share type %s is not valid for %s" : "El tipo del elemento compartido %s no es válido para %s",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "El backend %s que comparte debe implementar la interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "No fue encontrado el Backend que comparte %s ",
+ "Sharing backend for %s not found" : "No fue encontrado el Backend que comparte para %s",
+ "Sharing failed, because the user %s is the original sharer" : "Se presentó una falla al compartir, porque el usuario %s es quien compartió originalmente",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al compartir %s, porque los permisos exceden los permisos otorgados a %s",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Se presentó una falla al compartir %s porque el backend que comparte %s no pudo encontrar su origen",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Se presentó una falla al compartir %s porque el archivo no se encontró en el caché de archivos",
+ "Can’t increase permissions of %s" : "No es posible incrementar los privilegios de %s",
+ "Files can’t be shared with delete permissions" : "Los archivos no se pueden compartir con permisos de borrado",
+ "Files can’t be shared with create permissions" : "Los archivos no se pueden compartir con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración se encuentra en el pasado",
+ "Can’t set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "%s shared »%s« with you" : "%s ha compartido »%s« contigo",
+ "%s shared »%s« with you." : "%s compartió contigo »%s«.",
+ "Click the button below to open it." : "Haz click en el botón inferior para abrirlo. ",
+ "Open »%s«" : "Abrir »%s«",
+ "%s via %s" : "%s por %s",
+ "The requested share does not exist anymore" : "El recurso compartido solicitado ya no existe",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Debes proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El usuario contiene un espacio en blanco al inicio o al final",
+ "Username must not consist of dots only" : "El usuario no debe consistir de solo puntos. ",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese usuario ya está en uso",
+ "Could not create user" : "No fue posible crear el usuario",
+ "User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no pudo ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos tus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, por favor intentalo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "La ficha ha expirado. Por favor recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuentas con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"",
+ "This can usually be fixed by giving the webserver write access to the apps directory or disabling the appstore in the config file. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio de las aplicaciones o deshabilitando la appstore en el archivo config. Por favor ve %s",
+ "Cannot create \"data\" directory" : "No fue posible crear el directorio \"data\"",
+ "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Por lo general esto se puede resolver al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s",
+ "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Por lo general los permisos se pueden corregir al darle al servidor web acceso de escritura al directorio raíz. Por favor ve %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please install one of these locales on your system and restart your webserver." : "Por favor instala uno de las siguientes configuraciones locales en tu sistema y reinicia tu servidor web",
+ "Please ask your server administrator to install the module." : "Por favor solicita a tu adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corregir este tema, establece <code>mbstring.func_overload</code> a <code>0</code> en tu archivo php.ini",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s está instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, por favor actualiza la versión de su libxml2 y reinicia tu servidor web. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor solicita al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Por favor actualiza tu versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor cambia los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Your data directory is readable by other users" : "Tu direcctorio data puede ser leído por otros usuarios",
+ "Your data directory must be an absolute path" : "Tu directorio data debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifica el valor de \"datadirectory\" en tu configuración",
+ "Your data directory is invalid" : "Tu directorio de datos es inválido",
+ "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Asegurate de que exista una archivo llamado \".ocdata\" en la raíz del directorio de datos. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "El tiempo de la conexión del almacenamiento se agotó. %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Por favor habilítalo en tus configuraciones de aplicación o contacta a tu administrador. ",
+ "Server settings" : "Configuraciones del servidor",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "El comando infractor fue: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Necesitas ingresar una cuenta ya existente o la del administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "El comando infractor fue: \"%s\", nombre: %s, contraseña: %s",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se presentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible borrar la fecha de expiración. Los elelentos compartidos deben tener una fecha de expiración.",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Personal" : "Personal",
+ "Admin" : "Administración",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Esto se puede arreglar por %s al darle acceso de escritura al servidor web al directorio de las aplicaciones %s o al deshabilitar la tienda de aplicaciones en el archivo de configuración",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio de \"datos\" (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Por favor verifica que el directorio de datos tenga un archivo \".ocdata\" en su raíz. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/private/Collaboration/AutoComplete/Manager.php b/lib/private/Collaboration/AutoComplete/Manager.php
new file mode 100644
index 00000000000..eedc4fb5b40
--- /dev/null
+++ b/lib/private/Collaboration/AutoComplete/Manager.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Collaboration\AutoComplete;
+
+use OCP\Collaboration\AutoComplete\IManager;
+use OCP\Collaboration\AutoComplete\ISorter;
+use OCP\IServerContainer;
+
+class Manager implements IManager {
+ /** @var string[] */
+ protected $sorters =[];
+
+ /** @var ISorter[] */
+ protected $sorterInstances = [];
+ /** @var IServerContainer */
+ private $c;
+
+ public function __construct(IServerContainer $container) {
+ $this->c = $container;
+ }
+
+ public function runSorters(array $sorters, array &$sortArray, array $context) {
+ $sorterInstances = $this->getSorters();
+ while($sorter = array_shift($sorters)) {
+ if(isset($sorterInstances[$sorter])) {
+ $sorterInstances[$sorter]->sort($sortArray, $context);
+ } else {
+ $this->c->getLogger()->warning('No sorter for ID "{id}", skipping', [
+ 'app' => 'core', 'id' => $sorter
+ ]);
+ }
+ }
+ }
+
+ public function registerSorter($className) {
+ $this->sorters[] = $className;
+ }
+
+ protected function getSorters() {
+ if(count($this->sorterInstances) === 0) {
+ foreach ($this->sorters as $sorter) {
+ /** @var ISorter $instance */
+ $instance = $this->c->resolve($sorter);
+ if(!$instance instanceof ISorter) {
+ $this->c->getLogger()->notice('Skipping sorter which is not an instance of ISorter. Class name: {class}',
+ ['app' => 'core', 'class' => $sorter]);
+ continue;
+ }
+ $sorterId = trim($instance->getId());
+ if(trim($sorterId) === '') {
+ $this->c->getLogger()->notice('Skipping sorter with empty ID. Class name: {class}',
+ ['app' => 'core', 'class' => $sorter]);
+ continue;
+ }
+ $this->sorterInstances[$sorterId] = $instance;
+ }
+ }
+ return $this->sorterInstances;
+ }
+}
diff --git a/lib/private/Collaboration/Collaborators/SearchResult.php b/lib/private/Collaboration/Collaborators/SearchResult.php
index 7b32b388203..184c1f69a1b 100644
--- a/lib/private/Collaboration/Collaborators/SearchResult.php
+++ b/lib/private/Collaboration/Collaborators/SearchResult.php
@@ -52,7 +52,7 @@ class SearchResult implements ISearchResult {
$this->exactIdMatches[$type->getLabel()] = 1;
}
- public function hasExactIdMatch(SearchResultType$type) {
+ public function hasExactIdMatch(SearchResultType $type) {
return isset($this->exactIdMatches[$type->getLabel()]);
}
@@ -64,8 +64,10 @@ class SearchResult implements ISearchResult {
$resultArrays = [$this->result['exact'][$type], $this->result[$type]];
foreach($resultArrays as $resultArray) {
- if ($resultArray['value']['shareWith'] === $collaboratorId) {
- return true;
+ foreach ($resultArray as $result) {
+ if ($result['value']['shareWith'] === $collaboratorId) {
+ return true;
+ }
}
}
diff --git a/lib/private/DB/MDB2SchemaManager.php b/lib/private/DB/MDB2SchemaManager.php
index 89b0d153212..ad3f93a2643 100644
--- a/lib/private/DB/MDB2SchemaManager.php
+++ b/lib/private/DB/MDB2SchemaManager.php
@@ -89,7 +89,7 @@ class MDB2SchemaManager {
} else if ($platform instanceof PostgreSqlPlatform) {
return new PostgreSqlMigrator($this->conn, $random, $config, $dispatcher);
} else {
- return new NoCheckMigrator($this->conn, $random, $config, $dispatcher);
+ return new Migrator($this->conn, $random, $config, $dispatcher);
}
}
diff --git a/lib/private/DB/NoCheckMigrator.php b/lib/private/DB/NoCheckMigrator.php
deleted file mode 100644
index 723653511b9..00000000000
--- a/lib/private/DB/NoCheckMigrator.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OC\DB;
-
-use Doctrine\DBAL\Schema\Schema;
-
-/**
- * migrator for database platforms that don't support the upgrade check
- *
- * @package OC\DB
- */
-class NoCheckMigrator extends Migrator {
- /**
- * @param \Doctrine\DBAL\Schema\Schema $targetSchema
- * @throws \OC\DB\MigrationException
- */
- public function checkMigrate(Schema $targetSchema) {}
-}
diff --git a/lib/private/DB/OracleMigrator.php b/lib/private/DB/OracleMigrator.php
index 2735529b5e2..f5e06b50d99 100644
--- a/lib/private/DB/OracleMigrator.php
+++ b/lib/private/DB/OracleMigrator.php
@@ -30,8 +30,79 @@ use Doctrine\DBAL\Schema\ColumnDiff;
use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\Table;
+use Doctrine\DBAL\Schema\ForeignKeyConstraint;
+
+class OracleMigrator extends Migrator {
+
+ /**
+ * Quote a column's name but changing the name requires recreating
+ * the column instance and copying over all properties.
+ *
+ * @param Column $column old column
+ * @return Column new column instance with new name
+ */
+ protected function quoteColumn(Column $column) {
+ $newColumn = new Column(
+ $this->connection->quoteIdentifier($column->getName()),
+ $column->getType()
+ );
+ $newColumn->setAutoincrement($column->getAutoincrement());
+ $newColumn->setColumnDefinition($column->getColumnDefinition());
+ $newColumn->setComment($column->getComment());
+ $newColumn->setDefault($column->getDefault());
+ $newColumn->setFixed($column->getFixed());
+ $newColumn->setLength($column->getLength());
+ $newColumn->setNotnull($column->getNotnull());
+ $newColumn->setPrecision($column->getPrecision());
+ $newColumn->setScale($column->getScale());
+ $newColumn->setUnsigned($column->getUnsigned());
+ $newColumn->setPlatformOptions($column->getPlatformOptions());
+ $newColumn->setCustomSchemaOptions($column->getPlatformOptions());
+ return $newColumn;
+ }
+
+ /**
+ * Quote an index's name but changing the name requires recreating
+ * the index instance and copying over all properties.
+ *
+ * @param Index $index old index
+ * @return Index new index instance with new name
+ */
+ protected function quoteIndex($index) {
+ return new Index(
+ //TODO migrate existing uppercase indexes, then $this->connection->quoteIdentifier($index->getName()),
+ $index->getName(),
+ array_map(function($columnName) {
+ return $this->connection->quoteIdentifier($columnName);
+ }, $index->getColumns()),
+ $index->isUnique(),
+ $index->isPrimary(),
+ $index->getFlags(),
+ $index->getOptions()
+ );
+ }
+
+ /**
+ * Quote an ForeignKeyConstraint's name but changing the name requires recreating
+ * the ForeignKeyConstraint instance and copying over all properties.
+ *
+ * @param ForeignKeyConstraint $fkc old fkc
+ * @return ForeignKeyConstraint new fkc instance with new name
+ */
+ protected function quoteForeignKeyConstraint($fkc) {
+ return new ForeignKeyConstraint(
+ array_map(function($columnName) {
+ return $this->connection->quoteIdentifier($columnName);
+ }, $fkc->getLocalColumns()),
+ $this->connection->quoteIdentifier($fkc->getForeignTableName()),
+ array_map(function($columnName) {
+ return $this->connection->quoteIdentifier($columnName);
+ }, $fkc->getForeignColumns()),
+ $fkc->getName(),
+ $fkc->getOptions()
+ );
+ }
-class OracleMigrator extends NoCheckMigrator {
/**
* @param Schema $targetSchema
* @param \Doctrine\DBAL\Connection $connection
@@ -46,37 +117,14 @@ class OracleMigrator extends NoCheckMigrator {
return new Table(
$this->connection->quoteIdentifier($table->getName()),
array_map(function(Column $column) {
- $newColumn = new Column(
- $this->connection->quoteIdentifier($column->getName()),
- $column->getType()
- );
- $newColumn->setAutoincrement($column->getAutoincrement());
- $newColumn->setColumnDefinition($column->getColumnDefinition());
- $newColumn->setComment($column->getComment());
- $newColumn->setDefault($column->getDefault());
- $newColumn->setFixed($column->getFixed());
- $newColumn->setLength($column->getLength());
- $newColumn->setNotnull($column->getNotnull());
- $newColumn->setPrecision($column->getPrecision());
- $newColumn->setScale($column->getScale());
- $newColumn->setUnsigned($column->getUnsigned());
- $newColumn->setPlatformOptions($column->getPlatformOptions());
- $newColumn->setCustomSchemaOptions($column->getPlatformOptions());
- return $newColumn;
+ return $this->quoteColumn($column);
}, $table->getColumns()),
array_map(function(Index $index) {
- return new Index(
- $this->connection->quoteIdentifier($index->getName()),
- array_map(function($columnName) {
- return $this->connection->quoteIdentifier($columnName);
- }, $index->getColumns()),
- $index->isUnique(),
- $index->isPrimary(),
- $index->getFlags(),
- $index->getOptions()
- );
+ return $this->quoteIndex($index);
}, $table->getIndexes()),
- $table->getForeignKeys(),
+ array_map(function(ForeignKeyConstraint $fck) {
+ return $this->quoteForeignKeyConstraint($fck);
+ }, $table->getForeignKeys()),
0,
$table->getOptions()
);
@@ -95,14 +143,56 @@ class OracleMigrator extends NoCheckMigrator {
foreach ($schemaDiff->changedTables as $tableDiff) {
$tableDiff->name = $this->connection->quoteIdentifier($tableDiff->name);
+
+ $tableDiff->addedColumns = array_map(function(Column $column) {
+ return $this->quoteColumn($column);
+ }, $tableDiff->addedColumns);
+
foreach ($tableDiff->changedColumns as $column) {
$column->oldColumnName = $this->connection->quoteIdentifier($column->oldColumnName);
// auto increment is not relevant for oracle and can anyhow not be applied on change
$column->changedProperties = array_diff($column->changedProperties, ['autoincrement', 'unsigned']);
}
+ // remove columns that no longer have changed (because autoincrement and unsigned are not supported)
$tableDiff->changedColumns = array_filter($tableDiff->changedColumns, function (ColumnDiff $column) {
return count($column->changedProperties) > 0;
});
+
+ $tableDiff->removedColumns = array_map(function(Column $column) {
+ return $this->quoteColumn($column);
+ }, $tableDiff->removedColumns);
+
+ $tableDiff->renamedColumns = array_map(function(Column $column) {
+ return $this->quoteColumn($column);
+ }, $tableDiff->renamedColumns);
+
+ $tableDiff->addedIndexes = array_map(function(Index $index) {
+ return $this->quoteIndex($index);
+ }, $tableDiff->addedIndexes);
+
+ $tableDiff->changedIndexes = array_map(function(Index $index) {
+ return $this->quoteIndex($index);
+ }, $tableDiff->changedIndexes);
+
+ $tableDiff->removedIndexes = array_map(function(Index $index) {
+ return $this->quoteIndex($index);
+ }, $tableDiff->removedIndexes);
+
+ $tableDiff->renamedIndexes = array_map(function(Index $index) {
+ return $this->quoteIndex($index);
+ }, $tableDiff->renamedIndexes);
+
+ $tableDiff->addedForeignKeys = array_map(function(ForeignKeyConstraint $fkc) {
+ return $this->quoteForeignKeyConstraint($fkc);
+ }, $tableDiff->addedForeignKeys);
+
+ $tableDiff->changedForeignKeys = array_map(function(ForeignKeyConstraint $fkc) {
+ return $this->quoteForeignKeyConstraint($fkc);
+ }, $tableDiff->changedForeignKeys);
+
+ $tableDiff->removedForeignKeys = array_map(function(ForeignKeyConstraint $fkc) {
+ return $this->quoteForeignKeyConstraint($fkc);
+ }, $tableDiff->removedForeignKeys);
}
return $schemaDiff;
diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
index ded69e8079b..15df808684b 100644
--- a/lib/private/Files/ObjectStore/ObjectStoreStorage.php
+++ b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
@@ -390,7 +390,15 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
$stat['size'] = filesize($tmpFile);
$stat['mtime'] = $mTime;
$stat['storage_mtime'] = $mTime;
- $stat['mimetype'] = \OC::$server->getMimeTypeDetector()->detect($tmpFile);
+
+ // run path based detection first, to use file extension because $tmpFile is only a random string
+ $mimetypeDetector = \OC::$server->getMimeTypeDetector();
+ $mimetype = $mimetypeDetector->detectPath($path);
+ if ($mimetype === 'application/octet-stream') {
+ $mimetype = $mimetypeDetector->detect($tmpFile);
+ }
+
+ $stat['mimetype'] = $mimetype;
$stat['etag'] = $this->getETag($path);
$fileId = $this->getCache()->put($path, $stat);
diff --git a/lib/private/Files/ObjectStore/S3ObjectTrait.php b/lib/private/Files/ObjectStore/S3ObjectTrait.php
index 6fb12265cb7..4bfa08a3e59 100644
--- a/lib/private/Files/ObjectStore/S3ObjectTrait.php
+++ b/lib/private/Files/ObjectStore/S3ObjectTrait.php
@@ -49,12 +49,15 @@ trait S3ObjectTrait {
'Bucket' => $this->bucket,
'Key' => $urn
]);
- $command['@http']['stream'] = true;
- $result = $client->execute($command);
- /** @var StreamInterface $body */
- $body = $result['Body'];
+ $request = \Aws\serialize($command);
+ $opts = [
+ 'http' => [
+ 'header' => $request->getHeaders()
+ ]
+ ];
- return $body->detach();
+ $context = stream_context_create($opts);
+ return fopen($request->getUri(), 'r', false, $context);
}
/**
diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php
index cd4ddc2f067..928c68251cf 100644
--- a/lib/private/Files/Type/Detection.php
+++ b/lib/private/Files/Type/Detection.php
@@ -173,6 +173,10 @@ class Detection implements IMimeTypeDetector {
// note: leading dot doesn't qualify as extension
if (strpos($fileName, '.') > 0) {
+
+ // remove versioning extension: name.v1508946057 and transfer extension: name.ocTransferId2057600214.part
+ $fileName = preg_replace('!((\.v\d+)|((.ocTransferId\d+)?.part))$!', '', $fileName);
+
//try to guess the type by the file extension
$extension = strtolower(strrchr($fileName, '.'));
$extension = substr($extension, 1); //remove leading .
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 7fee0883a25..d69f3b45fd2 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -447,8 +447,28 @@ class View {
@ob_end_clean();
$handle = $this->fopen($path, 'rb');
if ($handle) {
- if (fseek($handle, $from) === 0) {
- $chunkSize = 8192; // 8 kB chunks
+ $chunkSize = 8192; // 8 kB chunks
+ $startReading = true;
+
+ if ($from !== 0 && $from !== '0' && fseek($handle, $from) !== 0) {
+ // forward file handle via chunked fread because fseek seem to have failed
+
+ $end = $from + 1;
+ while (!feof($handle) && ftell($handle) < $end) {
+ $len = $from - ftell($handle);
+ if ($len > $chunkSize) {
+ $len = $chunkSize;
+ }
+ $result = fread($handle, $len);
+
+ if ($result === false) {
+ $startReading = false;
+ break;
+ }
+ }
+ }
+
+ if ($startReading) {
$end = $to + 1;
while (!feof($handle) && ftell($handle) < $end) {
$len = $end - ftell($handle);
diff --git a/lib/private/Mail/Attachment.php b/lib/private/Mail/Attachment.php
new file mode 100644
index 00000000000..7b85ad1dbb9
--- /dev/null
+++ b/lib/private/Mail/Attachment.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Mail;
+
+use OCP\Mail\IAttachment;
+
+/**
+ * Class Attachment
+ *
+ * @package OC\Mail
+ * @since 13.0.0
+ */
+class Attachment implements IAttachment {
+
+ /** @var \Swift_Mime_Attachment */
+ protected $swiftAttachment;
+
+ public function __construct(\Swift_Mime_Attachment $attachment) {
+ $this->swiftAttachment = $attachment;
+ }
+
+ /**
+ * @param string $filename
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setFilename($filename) {
+ $this->swiftAttachment->setFilename($filename);
+ return $this;
+ }
+
+ /**
+ * @param string $contentType
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setContentType($contentType) {
+ $this->swiftAttachment->setContentType($contentType);
+ return $this;
+ }
+
+ /**
+ * @param string $body
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setBody($body) {
+ $this->swiftAttachment->setBody($body);
+ return $this;
+ }
+
+ /**
+ * @return \Swift_Mime_Attachment
+ */
+ public function getSwiftAttachment() {
+ return $this->swiftAttachment;
+ }
+
+}
diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php
index 43fdb07b810..ad59d640b3e 100644
--- a/lib/private/Mail/Mailer.php
+++ b/lib/private/Mail/Mailer.php
@@ -26,6 +26,7 @@ use OCP\Defaults;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
+use OCP\Mail\IAttachment;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\ILogger;
@@ -92,6 +93,27 @@ class Mailer implements IMailer {
}
/**
+ * @param string|null $data
+ * @param string|null $filename
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachment($data = null, $filename = null, $contentType = null) {
+ return new Attachment(\Swift_Attachment::newInstance($data, $filename, $contentType));
+ }
+
+ /**
+ * @param string $path
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachmentFromPath($path, $contentType = null) {
+ return new Attachment(\Swift_Attachment::fromPath($path, $contentType));
+ }
+
+ /**
* Creates a new email template object
*
* @param string $emailId
diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php
index b4d1e4dbe7a..dcd4a66e996 100644
--- a/lib/private/Mail/Message.php
+++ b/lib/private/Mail/Message.php
@@ -23,6 +23,7 @@
namespace OC\Mail;
+use OCP\Mail\IAttachment;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMessage;
use Swift_Message;
@@ -44,6 +45,17 @@ class Message implements IMessage {
}
/**
+ * @param IAttachment $attachment
+ * @return $this
+ * @since 13.0.0
+ */
+ public function attach(IAttachment $attachment) {
+ /** @var Attachment $attachment */
+ $this->swiftMessage->attach($attachment->getSwiftAttachment());
+ return $this;
+ }
+
+ /**
* SwiftMailer does currently not work with IDN domains, this function therefore converts the domains
* FIXME: Remove this once SwiftMailer supports IDN
*
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 84c09c8e6db..c461d3842cd 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -106,6 +106,7 @@ use OCA\Theming\ThemingDefaults;
use OCP\App\IAppManager;
use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\Collaboration\AutoComplete\IManager;
use OCP\Defaults;
use OCA\Theming\Util;
use OCP\Federation\ICloudIdManager;
@@ -1011,6 +1012,8 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerAlias('CollaboratorSearch', \OCP\Collaboration\Collaborators\ISearch::class);
+ $this->registerAlias(\OCP\Collaboration\AutoComplete\IManager::class, \OC\Collaboration\AutoComplete\Manager::class);
+
$this->registerService('SettingsManager', function (Server $c) {
$manager = new \OC\Settings\Manager(
$c->getLogger(),
@@ -1802,6 +1805,13 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
+ * @return \OCP\Collaboration\AutoComplete\IManager
+ */
+ public function getAutoCompleteManager(){
+ return $this->query(IManager::class);
+ }
+
+ /**
* Returns the LDAP Provider
*
* @return \OCP\LDAP\ILDAPProvider
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index bcef85bd17a..379d87633ab 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -1322,7 +1322,7 @@ class Manager implements IManager {
*
* @param \OCP\Files\Node $path
* @param bool $recursive Should we check all parent folders as well
- * @param bool $currentAccess Should the user have currently access to the file
+ * @param bool $currentAccess Ensure the recipient has access to the file (e.g. did not unshare it)
* @return array
*/
public function getAccessList(\OCP\Files\Node $path, $recursive = true, $currentAccess = false) {
diff --git a/lib/private/SystemConfig.php b/lib/private/SystemConfig.php
index 3610486140d..91afbeb8967 100644
--- a/lib/private/SystemConfig.php
+++ b/lib/private/SystemConfig.php
@@ -37,22 +37,30 @@ class SystemConfig {
/** @var array */
protected $sensitiveValues = [
+ 'instanceid' => true,
+ 'trusted_domains' => true,
+ 'datadirectory' => true,
+ 'overwrite.cli.url' => true,
'dbname' => true,
+ 'dbhost' => true,
'dbpassword' => true,
'dbuser' => true,
'mail_from_address' => true,
'mail_domain' => true,
+ 'mail_smtphost' => true,
'mail_smtpname' => true,
'mail_smtppassword' => true,
'passwordsalt' => true,
'secret' => true,
'updater.secret' => true,
+ 'trusted_proxies' => true,
'proxyuserpwd' => true,
'log.condition' => [
'shared_secret' => true,
],
'license-key' => true,
'redis' => [
+ 'host' => true,
'password' => true,
],
'objectstore' => [
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 519bb2cad2e..49fac2f4d96 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -185,6 +185,8 @@ class OC_App {
'class' => $plugin['@value'],
];
\OC::$server->getCollaboratorSearch()->registerPlugin($pluginInfo);
+ } else if ($plugin['@attributes']['type'] === 'autocomplete-sort') {
+ \OC::$server->getAutoCompleteManager()->registerSorter($plugin['@value']);
}
}
}
diff --git a/lib/public/Collaboration/AutoComplete/IManager.php b/lib/public/Collaboration/AutoComplete/IManager.php
new file mode 100644
index 00000000000..e9f33727cd2
--- /dev/null
+++ b/lib/public/Collaboration/AutoComplete/IManager.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Collaboration\AutoComplete;
+
+/**
+ * Interface IManager
+ *
+ * @package OCP\Collaboration\AutoComplete
+ * @since 13.0.0
+ */
+interface IManager {
+ /**
+ * @param string $className – class name of the ISorter implementation
+ * @since 13.0.0
+ */
+ public function registerSorter($className);
+
+ /**
+ * @param array $sorters list of sorter IDs, seperated by "|"
+ * @param array $sortArray array representation of OCP\Collaboration\Collaborators\ISearchResult
+ * @param array $context context info of the search, keys: itemType, itemId
+ * @since 13.0.0
+ */
+ public function runSorters(array $sorters, array &$sortArray, array $context);
+}
diff --git a/lib/public/Collaboration/AutoComplete/ISorter.php b/lib/public/Collaboration/AutoComplete/ISorter.php
new file mode 100644
index 00000000000..538ca41003d
--- /dev/null
+++ b/lib/public/Collaboration/AutoComplete/ISorter.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Collaboration\AutoComplete;
+
+/**
+ * Interface ISorter
+ *
+ * Sorts the list of .e.g users for auto completion
+ *
+ * @package OCP\Collaboration\AutoComplete
+ * @since 13.0.0
+ */
+interface ISorter {
+
+ /**
+ * @return string The ID of the sorter, e.g. commenters
+ * @since 13.0.0
+ */
+ public function getId();
+
+ /**
+ * executes the sort action
+ *
+ * @param array $sortArray the array to be sorted, provided as reference
+ * @param array $context carries key 'itemType' and 'itemId' of the source object (e.g. a file)
+ * @since 13.0.0
+ */
+ public function sort(array &$sortArray, array $context);
+}
diff --git a/lib/public/IRequest.php b/lib/public/IRequest.php
index 98d8f5bb83a..262b595acc7 100644
--- a/lib/public/IRequest.php
+++ b/lib/public/IRequest.php
@@ -69,6 +69,11 @@ interface IRequest {
const USER_AGENT_CLIENT_ANDROID = '/^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/';
/**
+ * @since 13.0.0
+ */
+ const USER_AGENT_TALK_ANDROID = '/^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk v.*$/';
+
+ /**
* @since 9.1.0
*/
const USER_AGENT_CLIENT_DESKTOP = '/^Mozilla\/5\.0 \([A-Za-z ]+\) (mirall|csyncoC)\/.*$/';
@@ -79,6 +84,11 @@ interface IRequest {
const USER_AGENT_CLIENT_IOS = '/^Mozilla\/5\.0 \(iOS\) (ownCloud|Nextcloud)\-iOS.*$/';
/**
+ * @since 13.0.0
+ */
+ const USER_AGENT_TALK_IOS = '/^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk v.*$/';
+
+ /**
* @param string $name
*
* @return string
diff --git a/lib/public/Mail/IAttachment.php b/lib/public/Mail/IAttachment.php
new file mode 100644
index 00000000000..32348e7a309
--- /dev/null
+++ b/lib/public/Mail/IAttachment.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\Mail;
+
+/**
+ * Interface IAttachment
+ *
+ * @package OCP\Mail
+ * @since 13.0.0
+ */
+interface IAttachment {
+
+ /**
+ * @param string $filename
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setFilename($filename);
+
+ /**
+ * @param string $contentType
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setContentType($contentType);
+
+ /**
+ * @param string $body
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setBody($body);
+
+}
diff --git a/lib/public/Mail/IMailer.php b/lib/public/Mail/IMailer.php
index 35189c22a69..10096548256 100644
--- a/lib/public/Mail/IMailer.php
+++ b/lib/public/Mail/IMailer.php
@@ -54,6 +54,23 @@ interface IMailer {
public function createMessage();
/**
+ * @param string|null $data
+ * @param string|null $filename
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachment($data = null, $filename = null, $contentType = null);
+
+ /**
+ * @param string $path
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachmentFromPath($path, $contentType = null);
+
+ /**
* Creates a new email template object
*
* @param string $emailId
diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php
index 20e4ea19c4c..e82b4ff93a9 100644
--- a/lib/public/Mail/IMessage.php
+++ b/lib/public/Mail/IMessage.php
@@ -22,12 +22,20 @@
namespace OCP\Mail;
/**
- * Class Message
+ * Interface IMessage
*
* @package OCP\Mail
* @since 13.0.0
*/
interface IMessage {
+
+ /**
+ * @param IAttachment $attachment
+ * @return $this
+ * @since 13.0.0
+ */
+ public function attach(IAttachment $attachment);
+
/**
* Set the from address of this message.
*
diff --git a/settings/css/settings.scss b/settings/css/settings.scss
index f649ef1a31e..a610b7d2df5 100644
--- a/settings/css/settings.scss
+++ b/settings/css/settings.scss
@@ -787,10 +787,13 @@ span.version {
display: block;
margin: 8px 0;
}
- padding: 10px 30px;
margin-bottom: 0;
}
+.personal-settings-setting-box .section {
+ padding: 10px 30px;
+}
+
.followupsection {
display: block;
padding: 0 30px 30px 30px;
@@ -1191,7 +1194,14 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
.settings-caption {
font-weight: bold;
line-height: 44px;
- padding: 0 12px;
+ padding: 0 44px;
white-space: nowrap;
text-overflow: ellipsis;
+ // !important to overwrite specific hover and focus
+ opacity: .4 !important;
+ box-shadow: none !important;
+
+ &:not(:first-child) {
+ margin-top: 22px;
+ }
}
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 187327d03a1..d36e8e97335 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"A login attempt using two-factor authentication failed (%1$s)" : "Ha fallado un intento de identificación usando autenticación en dos pasos (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Su <strong>contraseña</strong> o <strong>dirección de correo electrónico</strong> fue modificado",
"Your apps" : "Tus apps",
+ "Updates" : "Actualizaciones",
"Enabled apps" : "Apps habilitadas",
"Disabled apps" : "Apps inhabilitadas",
"App bundles" : "Lotes de apps",
@@ -103,6 +104,7 @@ OC.L10N.register(
"Error: This app can not be enabled because it makes the server unstable" : "Error: Esta app no se puede activar porque desestabiliza el servidor",
"Error: Could not disable broken app" : "Error: No se ha podido desactivar una app estropeada",
"Error while disabling broken app" : "Error mientras deshabilitaba la App dañada",
+ "No app updates available" : "No hay actualizaciones de apps disponibles",
"Updating...." : "Actualizando...",
"Error while updating app" : "Error mientras se actualizaba la aplicación",
"Updated" : "Actualizado",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index e79c7cfca38..0a9ac45667c 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -10,6 +10,7 @@
"A login attempt using two-factor authentication failed (%1$s)" : "Ha fallado un intento de identificación usando autenticación en dos pasos (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Su <strong>contraseña</strong> o <strong>dirección de correo electrónico</strong> fue modificado",
"Your apps" : "Tus apps",
+ "Updates" : "Actualizaciones",
"Enabled apps" : "Apps habilitadas",
"Disabled apps" : "Apps inhabilitadas",
"App bundles" : "Lotes de apps",
@@ -101,6 +102,7 @@
"Error: This app can not be enabled because it makes the server unstable" : "Error: Esta app no se puede activar porque desestabiliza el servidor",
"Error: Could not disable broken app" : "Error: No se ha podido desactivar una app estropeada",
"Error while disabling broken app" : "Error mientras deshabilitaba la App dañada",
+ "No app updates available" : "No hay actualizaciones de apps disponibles",
"Updating...." : "Actualizando...",
"Error while updating app" : "Error mientras se actualizaba la aplicación",
"Updated" : "Actualizado",
diff --git a/settings/l10n/es_CR.js b/settings/l10n/es_CR.js
new file mode 100644
index 00000000000..64396e1cfc8
--- /dev/null
+++ b/settings/l10n/es_CR.js
@@ -0,0 +1,457 @@
+OC.L10N.register(
+ "settings",
+ {
+ "{actor} changed your password" : "{actor} ha cambiado tu contraseña",
+ "You changed your password" : "Cambiaste tu contraseña",
+ "Your password was reset by an administrator" : "Tu contraseña ha sido restablecida por un adminsitrador",
+ "{actor} changed your email address" : "{actor} ha cambiado tu dirección de correo electrónico",
+ "You changed your email address" : "Cambiaste tu dirección de correo electrónico",
+ "Your email address was changed by an administrator" : "Tu dirección de correo electrónico ha sido cambiada por un administrador",
+ "Security" : "Seguridad",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Has iniciado sesión exitosamente usando autenticación de dos-factores (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un intento de autenticación usando autenticación de dos-factores ha fallado (%1$s)",
+ "Your <strong>password</strong> or <strong>email</strong> was modified" : "Tu <strong>contraseña</strong> o <strong>correo electrónico</strong> ha sido modificado",
+ "Your apps" : "Tus aplicaciones",
+ "Updates" : "Actualizaciones",
+ "Enabled apps" : "Aplicaciones habilitadas",
+ "Disabled apps" : "Aplicaciones deshabilitadas",
+ "App bundles" : "Paquetes de aplicación",
+ "Wrong password" : "Contraseña incorrecta",
+ "Saved" : "Guardado",
+ "No user supplied" : "No se proporcionó usuario alguno",
+ "Unable to change password" : "No fue posible cambiar la contraseña",
+ "Authentication error" : "Error de autenticación",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Por favor proporciona una contraseña de recuperación de administrador; de lo contrario toda la información del usuario se perderá. ",
+ "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Por favor verificala e inténtalo de nuevo.",
+ "Backend doesn't support password change, but the user's encryption key was updated." : "El backend no soporta el cambio de contraseñas, pero la llave de encripción del usuario fue actualizada.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "Instalando y actualizando aplicaciones por la tienda de aplicaciones o Compartido la Nube Federada",
+ "Federated Cloud Sharing" : "Compartir en la Nube Federada",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando una versión anticuada (%s) de %s. Por favor actualiza tu sistema operativo o funciones tales como %s no funcionarán de forma confiable.",
+ "A problem occurred, please check your log files (Error: %s)" : "Se presentó un problema, por favor verifica tus archivos de bitácoras (Error: %s)",
+ "Migration Completed" : "Migración completada",
+ "Group already exists." : "El grupo ya existe.",
+ "Unable to add group." : "No fue posible agregar el grupo.",
+ "Unable to delete group." : "No fue posible borrar el grupo.",
+ "Invalid SMTP password." : "Constraseña SMTP inválida. ",
+ "Email setting test" : "Prueba de ajustes de correo",
+ "Well done, %s!" : "¡Bien hecho, %s!",
+ "If you received this email, the email configuration seems to be correct." : "Si has recibido este correo electrónico, la configuración del correo electrónico parece estar correcta. ",
+ "Email could not be sent. Check your mail server log" : "No fue posible enviar el correo electrónico. Por favor verfica la bitácora de tu servidor de correo",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Se presentó un problema al enviar el correo electrónico. Por favor revisa tus configuraciones (Error: %s)",
+ "You need to set your user email before being able to send test emails." : "Requieres establecer tu correo electrónico antes de poder enviar correos electrónicos de prueba. ",
+ "Invalid mail address" : "Dirección de correo inválida",
+ "No valid group selected" : "No se ha seleccionado un grupo válido",
+ "A user with that name already exists." : "Un usuario con ese nombre ya existe. ",
+ "To send a password link to the user an email address is required." : "Para enviar la liga a una contraseña al usuario, se requiere de una dirección de correo electrónico.",
+ "Unable to create user." : "No fue posible crear el usuario. ",
+ "Unable to delete user." : "No fue posible eliminar el usuario.",
+ "Error while enabling user." : "Se presentó un error al habilitar el usuario. ",
+ "Error while disabling user." : "Se presentó un error al deshabilitar el usuario.",
+ "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Para poder verificar tu cuenta de Twitter, publica el siguiente tweet en Twitter (por favor asegúrarte de publicar sin ninguna línea en blanco):",
+ "In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Para poder verificar tu sitio Web, agrega el siguiente contendio a tu web-root en '.well-known/CloudIdVerificationCode.txt' (por favor asegurate de que el texto completo este en una sóla línea):",
+ "Settings saved" : "Se han guardado las configuraciones ",
+ "Unable to change full name" : "No fue posible cambiar el nombre completo",
+ "Unable to change email address" : "No fue posible cambiar la dirección de correo electrónico",
+ "Your full name has been changed." : "Tu nombre completo ha sido cambiado.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario inválido",
+ "Unable to change mail address" : "No fue posible cambiar la dirección de correo",
+ "Email saved" : "Correo electrónico guardado",
+ "%1$s changed your password on %2$s." : "%1$s cambió tu contraseña el %2$s.",
+ "Your password on %s was changed." : "Tu contraseña de %s fue cambiada. ",
+ "Your password on %s was reset by an administrator." : "Tu contraseña de %s fue restablecida por un administrador.",
+ "Password for %1$s changed on %2$s" : "La contraseña para %1$s fue cambiada el %2$s",
+ "Password changed for %s" : "La contraseña fue cambiada para %s",
+ "If you did not request this, please contact an administrator." : "Si no lo solicitaste, por favor contacta a un administrador. ",
+ "%1$s changed your email address on %2$s." : "%1$s cambió tu dirección de correo electrónico el %2$s.",
+ "Your email address on %s was changed." : "Tu dirección de correo electrónico en %s fue cambiada. ",
+ "Your email address on %s was changed by an administrator." : "Tu dirección de correo electrónico en %s fue cambiada por un adminsitrador. ",
+ "Email address for %1$s changed on %2$s" : "La dirección de correo electrónico para %1$s fue cambiada el %2$s",
+ "Email address changed for %s" : "La dirección de correo electrónico fue cambiada para %s",
+ "The new email address is %s" : "La nueva dirección de correo electrónico es %s",
+ "Your %s account was created" : "Tu cuenta %s ha sido creada",
+ "Welcome aboard" : "Bienvenido a bordo",
+ "Welcome aboard %s" : "Bienvenido a bordo %s",
+ "You now have an %s account, you can add, protect, and share your data." : "Ahora tienes una cuenta %s, puedes agregar, proteger y compartir tus datos.",
+ "Your username is: %s" : "Tu Usuario es: %s",
+ "Set your password" : "Establece tu contraseña",
+ "Go to %s" : "Ir a %s",
+ "Install Client" : "Instalar el cliente",
+ "Password confirmation is required" : "Se requiere la confirmación de la contraseña",
+ "Couldn't remove app." : "No fue posible eliminar la aplicación. ",
+ "Couldn't update app." : "No fue posible actualizar la aplicación.",
+ "Are you really sure you want add {domain} as trusted domain?" : "¿Realmente estás seguro que quieres agregar a {domain} como un dominio de confianza?",
+ "Add trusted domain" : "Agregar un dominio de confianza",
+ "Migration in progress. Please wait until the migration is finished" : "La migración está en curso. Por favor espera hasta que termine la migración",
+ "Migration started …" : "La migración ha comenzado ...",
+ "Not saved" : "No guardado",
+ "Sending…" : "Enviando...",
+ "Email sent" : "Correo electrónico enviado",
+ "Official" : "Oficial",
+ "All" : "Todos",
+ "Update to %s" : "Actualizar a %s",
+ "No apps found for your version" : "No se encontraron aplicaciones para tu versión",
+ "The app will be downloaded from the app store" : "La aplicación será descargada de la tienda de aplicaciones <app store>",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las aplicaciones oficiales son desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad centralizada y se encuentran listas para ser usadas en producción. ",
+ "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Las aplicaciones aprobadas son desarrolladas por desarrolladores de confianza y han pasado una verificación de seguridad. Se les brinda mantenimiento activamente en un repositorio de código abierto y los mantenedores las consideran estables para un uso casual a normal. ",
+ "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Esta aplicación no cuenta con una verificación contra temas de seguridad y es nueva o se sabe que es instable. Instalala bajo tu propio riesgo. ",
+ "Disabling app …" : "Deshabilitando la aplicación ...",
+ "Error while disabling app" : "Se presentó un error mientras se deshabilitaba la aplicación",
+ "Disable" : "Deshabilitar",
+ "Enable" : "Habilitar",
+ "Enabling app …" : "Habilitando aplicación ...",
+ "Error while enabling app" : "Se presentó un error al habilitar la aplicación",
+ "Error: This app can not be enabled because it makes the server unstable" : "Error: Esta aplicación no puede ser habilitada porque genera inestabilidad en el servidor",
+ "Error: Could not disable broken app" : "Error: No fue posible deshabilitar la aplicación rota",
+ "Error while disabling broken app" : "Se presentó un error al deshabilitar la aplicación rota",
+ "No app updates available" : "No hay actualizaciones disponibles de la aplicación ",
+ "Updating...." : "Actualizando....",
+ "Error while updating app" : "Se presentó un error al actualizar la aplicación",
+ "Updated" : "Actualizado",
+ "Removing …" : "Eliminando ...",
+ "Error while removing app" : "Se presentó un error al eliminar la aplicación",
+ "Remove" : "Eliminar",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación está habilitada pero necesita ser actualizada. Serás redireccionado a la página de actualización en 5 segundos. ",
+ "App update" : "Actualización de la aplicación",
+ "Approved" : "Aprobado",
+ "Experimental" : "Experimental",
+ "No apps found for {query}" : "No se encontraron aplicaciones para {query}",
+ "Enable all" : "Habilitar todo",
+ "Allow filesystem access" : "Permitir acceso al sistema de archivos",
+ "Disconnect" : "Desconectar",
+ "Revoke" : "Revocar",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome para Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "Cliente iOS",
+ "Android Client" : "Cliente Android",
+ "Sync client - {os}" : "Sync client - {os}",
+ "This session" : "Esta sesión",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar. ",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Error while loading browser sessions and device tokens" : "Se presentó un error al cargar las sesiones de tu navegador y las fichas de los dispositivos.",
+ "Error while creating device token" : "Se presentó un error al crear la ficha en el dispositivo",
+ "Error while deleting the token" : "Se presentó un error al borrar la ficha",
+ "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}",
+ "Delete" : "Borrar",
+ "Local" : "Local",
+ "Private" : "Privado",
+ "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",
+ "Verify" : "Verificar",
+ "Verifying …" : "Verificando ...",
+ "An error occured while changing your language. Please reload the page and try again." : "Se presentó un error al cambiar tu idioma. Por favor vuelve a cargar la página y vuelva a intentarlo. ",
+ "Select a profile picture" : "Selecciona una imagen de perfil",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "Groups" : "Grupos",
+ "Unable to delete {objName}" : "No fue posible borrar {objName}",
+ "Error creating group: {message}" : "Se presentó un error al crear el grupo: {message}",
+ "A valid group name must be provided" : "Debes proporcionar un nombre de grupo válido",
+ "deleted {groupName}" : "borrado {groupName}",
+ "undo" : "deshacer",
+ "{size} used" : "{size} usado",
+ "never" : "nunca",
+ "deleted {userName}" : "borrado {userName}",
+ "No user found for <strong>{pattern}</strong>" : "No se encontraron usuarios para <strong>{pattern}</strong>",
+ "Unable to add user to group {group}" : "No fue posible agregar el usuario al grupo {group}",
+ "Unable to remove user from group {group}" : "No fue posible eliminar el usuario del grupo {group}",
+ "Add group" : "Agregar grupo",
+ "Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"",
+ "no group" : "sin grupos",
+ "Password successfully changed" : "La contraseña se cambió exitosamente",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "El cambiar la contraseña puede generar pérdida de datos, porque la recuperación de datos no está disponible para este usuario",
+ "Could not change the users email" : "No fue posible cambiar el correo electrónico del usuario. ",
+ "Error while changing status of {user}" : "Se presentó un error al cambiar el estatus del usuario {user}",
+ "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Error creating user: {message}" : "Se presentó un error al crear el usuario: {message}",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "Developer documentation" : "Documentación del desarrollador",
+ "View in store" : "Ver en la tienda",
+ "Limit to groups" : "Limitar a grupos",
+ "by %s" : "por %s",
+ "%s-licensed" : "%s-licensed",
+ "Documentation:" : "Documentación:",
+ "User documentation" : "Documentación del usuario",
+ "Admin documentation" : "Documentación del administrador",
+ "Visit website" : "Visita el sitio web",
+ "Report a bug" : "Reporta un detalle",
+ "Show description …" : "Mostrar descripción ...",
+ "Hide description …" : "Ocultar descripción ...",
+ "This app has an update available." : "Esta aplicación tiene una actualización disponible.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:",
+ "Enable only for specific groups" : "Habilitar sólo para grupos específicos",
+ "SSL Root Certificates" : "Certificado SSL Raíz",
+ "Common Name" : "Nombre común",
+ "Valid until" : "Válido hasta",
+ "Issued By" : "Levantado Por",
+ "Valid until %s" : "Válido hasta %s",
+ "Import root certificate" : "Importar certificado raíz",
+ "Administrator documentation" : "Documentación del adminsitrador",
+ "Online documentation" : "Documentación en línea",
+ "Forum" : "Foro",
+ "Getting help" : "Obtener ayuda",
+ "Commercial support" : "Soporte comercial",
+ "None" : "Ninguno",
+ "Login" : "Iniciar sesión",
+ "Plain" : "Plano",
+ "NT LAN Manager" : "Administrador de LAN NT",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "Servidor de correo electrónico",
+ "Open documentation" : "Abrir documentación",
+ "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es importante preparar este servidor para poder enviar correos electrónicos, como para restablecer contraseñas y notificaciones. ",
+ "Send mode" : "Modo de envío",
+ "Encryption" : "Encripción",
+ "From address" : "De la dirección",
+ "mail" : "correo",
+ "Authentication method" : "Método de autenticación",
+ "Authentication required" : "Autenticación requerida",
+ "Server address" : "Dirección del servidor",
+ "Port" : "Puerto",
+ "Credentials" : "Credenciales",
+ "SMTP Username" : "Usuario SMTP",
+ "SMTP Password" : "Contraseña SMTP",
+ "Store credentials" : "Almacenar credenciales",
+ "Test email settings" : "Probar las configuraciones de correo electrónico",
+ "Send email" : "Enviar correo electrónico",
+ "Server-side encryption" : "Encripción del lado del servidor",
+ "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." : "La encripción del lado del servidor hace posible encriptar archivos que serán cargados a este servidor. Esto trae consigo algunas limitaciónes como penalizaciones en el desemeño, asi que habilítalo sólo si es necesario. ",
+ "Enable server-side encryption" : "Habilitar encripción del lado del servidor",
+ "Please read carefully before activating server-side encryption: " : "Por favor lee detenidamente antes de activar la encripción del lado de servidor:",
+ "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." : "Una vez que la encripción se encuentre habilitada, todos lo archivos cargados al servidor desde ese momento en tiempo, se encriptarán en el servidor. Sólo será posible deshabilitar la encripción en una fecha posterior si el modulo de encripción activo soporta esa funcionalidad y si todas las preciondiciones están satisfechas (ejem. establecer una llave de recuperación).",
+ "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." : "La encripción por sí sola no garantiza la seguridad del sistema. Por favor consulta la documentación para mayores informes de cómo funciona la aplicación de encripción y de los casos de uso soportados. ",
+ "Be aware that encryption always increases the file size." : "Por favor considera que la encripción siempre aumenta el tamaño de los archivos. ",
+ "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Siempre es una buena idea generar respaldos de tus datos, en caso de tener encripción asegúrate de respaldar las llaves de encripción junto con tus datos. ",
+ "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final: ¿Realmente deseas habilitar la encripción?",
+ "Enable encryption" : "Habilitar encripción",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado un módulo de encripción, por favor habilita un módulo de encripción en el menú de la aplicación. ",
+ "Select default encryption module:" : "Selecciona el modulo de encripción predeterminado:",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesitas migrar tus llaves de encripción de la encripción anterior (ownCloud <= 8.0) a la actual. Por favor habilita el \"Módulo de encripción predeterminado\" y ejecuta el comando 'occ encryption:migrate'",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la actual. ",
+ "Start migration" : "Iniciar migración",
+ "Security & setup warnings" : "Advertencias de seguridad y configuración",
+ "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 Tips & Tricks section and the documentation for more information." : "Es importante que todo esté configurado correctamente por la seguridad y desempeño de tu instancia. Para ayudarte con esto, estamos haciendo unas validaciones automáticas. Por favor ve la sección de Consejos y Trucos así como la documentación para más información.",
+ "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP no parece estar configurado correctamente para consultar las variables de ambiente. La prueba con getenv(\"PATH\") sólo regresa una respuesta vacía.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Por favor verifica la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> en relación a las notas de configuración de PHP y la configuración de PHP en tu servidorr, especialmente cuando se usa 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." : "La configuración de Sólo Lectura ha sido habilitada. Esto previene establecer algunas configuraciones mediante la interface web. Adicionalmente, el archivo necesita que se le establezca tener permisos de escritura manualmente en cada actualización. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques internos de documentación. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto es posiblemente causado por un caché/acelerador tal como Zend OPcache o eAccelerator. ",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Tu base de datos no puede correr con el nivel de aislamiento de transacción de \"READ COMMITTED\". Puede causar problemas cuando mútiples acciones sean ejecutadas en paralelo.",
+ "%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version." : "%1$s con versión inferior a %2$s está instalado, por razones de estabilidad y desempeño te recomendamos actualizar a una versión de %1$s más reciente. ",
+ "The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Recomendamos ámpliamente que se habilite este módulo para obtener los mejores resultados en la detección de tipos 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 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "El bloqueo de archivos transaccional se encuentra deshabilitado, esto puede generar temas bajo ciertas condiciones. Habilita 'filelocking.enabled' en el archivo config.php para evitar problemas. Por favor consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatcón ↗</a> para más información.",
+ "System locale can not be set to a one which supports UTF-8." : "No es posible establecer la regionalización del sistema a una que soporte UTF-8.",
+ "This means that there might be problems with certain characters in filenames." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de archivos. ",
+ "It is strongly proposed to install the required packages on your system to support one of the following locales: %s." : "Se recomienda ámpliamente instalar los paquetes requeridos en tu sistema para soportar alguna de las siguientes regionalizaciones: %s.",
+ "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 (Suggested: \"%s\")" : "Si tu instalación no se hizo en la raíz del dominio y usa el sistema Cron, puede haber temas con la generación de la URL. Para prevenir estos problemas, por favor establece la opción \"overwrite.cli.url\" en tu archivo config.php a la ruta del webroot de tu instalación (Se sugiere: \"%s\")",
+ "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "No fue posible ejecutar el trabajo de cron via CLI. Se presentaron los siguientes errores técnicos:",
+ "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Por favor vuelve a verificar las <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guías de instalación↗</a>, y comprueba que no haya errores o advertenicas en la <a href=\"%s\">bitácora</a>.",
+ "All checks passed." : "Pasaron todas las verificaciones. ",
+ "Background jobs" : "Trabajos en segundo plano",
+ "Last job ran %s." : "El último trabajo corrió %s.",
+ "Last job execution ran %s. Something seems wrong." : "La última ejecución del trabajo corrió %s. Algo parece estar mal. ",
+ "Background job didn’t run yet!" : "¡El trabajo de segundo plano aún no ha corrido!",
+ "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Para un desempeño ideal, es importante configurar los trabajos de fondo correctamente. Para instancias más grandes 'Cron' es la configuración recomendada. Por favor consulta la documentación para más información. ",
+ "Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over HTTP." : "cron.php está registrado en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP. ",
+ "Use system cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos. ",
+ "The cron.php needs to be executed by the system user \"%s\"." : "El cron.php necesita ser ejecutado por el usuario de sistema \"%s\".",
+ "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión POSIX de PHP. Por favor ve la {linkstart}documentación de PHP{linkend} para más detalles. ",
+ "Version" : "Versión",
+ "Sharing" : "Compartiendo",
+ "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, puedes hacer ajustes finos al comportamiento de compartir. Por favor consulta la documentación para más información. ",
+ "Allow apps to use the Share API" : "Permitir que las aplicaciones usen el API para Compartir",
+ "Allow users to share via link" : "Permitir a los usuarios compartir mediante ligas",
+ "Allow public uploads" : "Permitir cargas públicas",
+ "Always ask for a password" : "Siempre pedir una contraseña",
+ "Enforce password protection" : "Forzar protección de contraseñas",
+ "Set default expiration date" : "Establecer la fecha de expiración predeterminada",
+ "Expire after " : "Expirar después de",
+ "days" : "días",
+ "Enforce expiration date" : "Forzar fecha de expiración",
+ "Allow resharing" : "Permitir volver 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 sólo compartir con otros usuarios en sus grupos",
+ "Exclude groups from sharing" : "Evitar que los grupos compartan",
+ "These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir elementos compartidos, pero no los podrán iniciar.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir el autocompletado de usuarios en la ventana de diálogo de compartir. Si esto está deshabilitado, se deberá ingresar el correo electrónico o nombre completo. ",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar el texto de exención de responsabilidad legal en la página de carga de ligas públicas. (Sólo 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 carga de la liga pública cuando la lista de archivos esté oculta. ",
+ "Tips & tricks" : "Consejos & trucos",
+ "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Existen muchas funcionalidades y configuraciones disponibles para personalizar y usar de manera óptima esta instancia. Aquí hay algunos consejos para más información. ",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente estás usando SQLite como el backend de base de datos. Para instalaciones más grandes te recomendamos cambiar a un backend de base de datos diferente.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Esto es particularmente recomendado cuando se usa el cliente de escritorio para sincronización de archivos. ",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos, usa la herramienta de la línea de comando 'occ db:convert-type', o consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.",
+ "How to do backups" : "Cómo hacer respaldos",
+ "Advanced monitoring" : "Monitoreo avanzado",
+ "Performance tuning" : "Optimización de rendimiento",
+ "Improving the config.php" : "Mejorando la config.php",
+ "Theming" : "Tematizar",
+ "Check the security of your Nextcloud over our security scan" : "Verifica la seguridad de tu Nextcloud con nuestro escaneo de seguridad",
+ "Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
+ "Personal" : "Personal",
+ "Administration" : "Administración",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
+ "Profile picture" : "Foto de perfil",
+ "Upload new" : "Cargar nuevo",
+ "Select from Files" : "Seleccionar desde Archivos",
+ "Remove image" : "Eliminar imagen",
+ "png or jpg, max. 20 MB" : "png o jpg max. 20 MB",
+ "Picture provided by original account" : "Imagen proporcionada por la cuenta original ",
+ "Cancel" : "Cancelar",
+ "Choose as profile picture" : "Seleccionar como foto del perfil",
+ "Full name" : "Nombre completo",
+ "No display name set" : "No se ha establecido el nombre a desplegar",
+ "Email" : "Correo electrónico",
+ "Your email address" : "Tu dirección de correo electrónico",
+ "No email address set" : "No se ha establecido la dirección de correo electrónico",
+ "For password reset and notifications" : "Para restablecer contraseña y notificaciones",
+ "Phone number" : "Número de teléfono",
+ "Your phone number" : "Su número telefónico",
+ "Address" : "Dirección",
+ "Your postal address" : "Tu dirección postal",
+ "Website" : "Sitio web",
+ "It can take up to 24 hours before the account is displayed as verified." : "Puede tomar hasta 24 horas antes de que la cuenta se muestre como verificada. ",
+ "Link https://…" : "Liga https:// ...",
+ "Twitter" : "Twitter",
+ "Twitter handle @…" : "Cuenta de twitter @...",
+ "You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "Language" : "Idioma",
+ "Help translate" : "Ayuda a traducir",
+ "Password" : "Contraseña",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Change password" : "Cambiar contraseña",
+ "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, de escritorio y móviles han iniciado sesión en tu cuenta. ",
+ "Device" : "Dispositivo",
+ "Last activity" : "Última actividad",
+ "App name" : "Nombre de la aplicación",
+ "Create new app password" : "Crear una nueva contraseña de aplicación",
+ "Use the credentials below to configure your app or device." : "Usa las siguientes credenciales para configurar tu aplicación o dispositivo. ",
+ "For security reasons this password will only be shown once." : "Por razones de seguridad esta contraseña sólo se mostrará una vez. ",
+ "Username" : "Usuario",
+ "Done" : "Terminado",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google+" : "Síguenos en Google+",
+ "Like our Facebook page" : "Da un Like a nuestra página de Facebook",
+ "Follow us on Twitter" : "Síguenos en Twitter",
+ "Check out our blog" : "Visita nuestro blog",
+ "Subscribe to our newsletter" : "Suscribete a nuestro boletín",
+ "Settings" : "Configuraciones ",
+ "Show storage location" : "Mostrar la ubicación del almacenamiento",
+ "Show user backend" : "Mostrar backend del usuario",
+ "Show last login" : "Mostrar último inicio de sesión",
+ "Show email address" : "Mostrar dirección de correo electrónico",
+ "Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
+ "When the password of a new user is left empty, an activation email with a link to set the password is sent." : "Cuando la contraseña de un usuario nuevo se deja en blanco, se envía un correo electrónico de activación con una liga para establecerla. ",
+ "E-Mail" : "Correo electrónico",
+ "Create" : "Crear",
+ "Admin Recovery Password" : "Recuperación de la contraseña del administrador",
+ "Enter the recovery password in order to recover the users files during password change" : "Ingresa la contraseña de recuperación con la finalidad de recuperar los archivos de los usuarios al cambiar la contraseña.",
+ "Everyone" : "Todos",
+ "Admins" : "Administradores",
+ "Disabled" : "Deshabilitado",
+ "Default quota" : "Cuota predeterminada",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indica la cuota de almacenamiento (ejem: \"512 MB\" ó \"12 GB\")",
+ "Unlimited" : "Ilimitado",
+ "Other" : "Otro",
+ "Group admin for" : "Administrador del grupo para",
+ "Quota" : "Cuota",
+ "Storage location" : "Úbicación del almacenamiento",
+ "User backend" : "Backend del usuario",
+ "Last login" : "Último inicio de sesión",
+ "change full name" : "cambiar el nombre completo",
+ "set new password" : "establecer nueva contraseña",
+ "change email address" : "cambiar la dirección de correo electrónico",
+ "Default" : "Predeterminado",
+ "Enabled" : "Habilitado",
+ "Not enabled" : "No habilitado",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor proporciona una contraseña de recuperación de administrador, de lo contrario se perderán todos los datos de usuario",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "El backend no soporta el cambio de contraseñas, pero la llave de encripción del usuario fue actualizada exitosamente.",
+ "test email settings" : "probar las configuraciones del correo electrónico",
+ "Invalid request" : "Solicitud inválida",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No fue posible eliminar el usuario del grupo %s",
+ "Sending..." : "Enviando...",
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Usted tiene %n actualización de la aplicación pendiente","Tienes %n actualizaciones de la aplicación pendientes"],
+ "Uninstalling ...." : "Desinstalando ...",
+ "Error while uninstalling app" : "Se presentó un error al desinstalar la aplicación",
+ "Uninstall" : "Desinstalar",
+ "__language_name__" : "Español (México)",
+ "Personal info" : "Información personal",
+ "Sessions" : "Sesiones",
+ "App passwords" : "Contraseñas de aplicación",
+ "Sync clients" : "Sincronizar clientes",
+ "This is used for sending out notifications." : "Esto se usa para enviar notificaciones",
+ "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Al parecer php no está correctamente configurado para consultar las variables de ambiente. La prueba con getenv(\"PATH\") solo está regresando una respuesta vacía. ",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Favor de consultar la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para las notas de configuración de php en tu servidor, específicamente al usar php-fpm. ",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s con versión inferior a %2$s está instalado, por razones de estabilidad y desempeño te recomendamos actualizar a una versión de %1$s mas reciente. ",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Te recomendamos ámpliamente que habilites este módulo para obtener los mejores resultados en la detección de tipos MIME.",
+ "This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Te sugerimos ámpliamente instalar en tu sistema los paquetes requeridos para soportar alguno de los sigueintes locales: %s.",
+ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si tu instalacion no fue hecha en la raíz del dominio y usa el cron del sistema, pueden presentarse temas con la generación de URLs. Para evitar estos problemas, por favor establece la opción \"overwrite.cli.url\" en tu archivo config.php a la ruta del webroot de tu instalación (Se sugiere : \"%s\")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar la tarea de cron con CLI. Se presentaron los siguientes errores técnicos:",
+ "Cron" : "Cron",
+ "Last cron job execution: %s." : "Última ejecución de tareas de cron: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Última ejecución de tareas de cron: %s. Algo parece estar mal. ",
+ "Cron was not executed yet!" : "¡Aún no han sido ejecutado el cron!",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio de cron del sistema para llamar el archivo cron.php cada 15 minutos.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión posix de PHP. Por favor consulta la {linkstart}documentación de PHP{linkend} para más detalles. ",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir auto-completar el nombre de usuario en la ventana de diálogo. Si esta opción está deshabilitada, el nombre de usuario completo debe ser ingresado.",
+ "Uninstall app" : "Desinstalar la aplicación",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hola,<br><br> sólo queremos informarte que ahora tienes una cuenta %s.<br><br> Tu usuario es: <strong>%s</strong> <br>Ingresa a ella: <strong><a href=\"%s\">%s</a></strong><br><br>",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola,\n\nsólo queremos informarte que ahora tienes una cuenta %s.\n\nTu usuario es: %s\n\nIngresa a ella: %s\n",
+ "For password recovery and notifications" : "Para recuperación de contraseña y notificaciones",
+ "Your website" : "Tu sitio web",
+ "Your Twitter handle" : "Tu cuenta de Twitter",
+ "Get the apps to sync your files" : "Obten las aplicaciones para sincronizar tus archivos",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "Aplicación android",
+ "iOS app" : "Aplicación iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "¡Si deseas apoyar al proyecto {contributeopen} únete al desarrollo{linkclose} o {contributeopen} pasa la voz {linkclose}!",
+ "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de Ejecución Inicial",
+ "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a tu cuenta. ",
+ "Name" : "Nombre",
+ "Follow us on Google Plus!" : "¡Sígueos en Google Plus!",
+ "Like our facebook page!" : "¡Dale un me gusta a nuestra página de facebook!",
+ "Subscribe to our twitter channel!" : "¡Suscríbete a nuestro canal de twitter!",
+ "Subscribe to our news feed!" : "¡Suscríbete a nuestra fuente de noticias!",
+ "Subscribe to our newsletter!" : "¡Suscríbete a nuestro boletín!",
+ "Show last log in" : "Mostrar el último inicio de sesión",
+ "Group name" : "Nombre del grupo",
+ "You have now an %s account, you can add, protect, and share your data." : "Ahora tienes una cuenta %s, puedes agregar, proteger y compartir tus datos. ",
+ "Verifying" : "Verificando",
+ "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 Tips & Ticks section and the documentation for more information." : "Es importante para la seguridad y desempeño de su instancia que todo esté configurado correctamente. Para ayudarlo con esto, estamos haciendo algunas verficaciones automáticas. Por favor consulta la sección de Consejos & Trucos de la documentación para más información. ",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Te recomendamos ámpliamente que habilites este módulo para obtener los mejores resultados en la detección de tipos MIME.",
+ "Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "A continuación se presenta un listado de las sesiones, dispositivos y eventos que se han presentado en tu cuenta. ",
+ "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Aquí puedes generar contraseñas individuales para las aplicaciones para que no tengas que dar tu contraseña. También puedes revocalras individualmente. ",
+ "Follow us on Google+!" : "¡Síguenos en Google+!",
+ "Follow us on Twitter!" : "¡Síguenos en Twitter!",
+ "Check out our blog!" : "¡Visita nuestro blog!"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/es_CR.json b/settings/l10n/es_CR.json
new file mode 100644
index 00000000000..213f6bb1da2
--- /dev/null
+++ b/settings/l10n/es_CR.json
@@ -0,0 +1,455 @@
+{ "translations": {
+ "{actor} changed your password" : "{actor} ha cambiado tu contraseña",
+ "You changed your password" : "Cambiaste tu contraseña",
+ "Your password was reset by an administrator" : "Tu contraseña ha sido restablecida por un adminsitrador",
+ "{actor} changed your email address" : "{actor} ha cambiado tu dirección de correo electrónico",
+ "You changed your email address" : "Cambiaste tu dirección de correo electrónico",
+ "Your email address was changed by an administrator" : "Tu dirección de correo electrónico ha sido cambiada por un administrador",
+ "Security" : "Seguridad",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Has iniciado sesión exitosamente usando autenticación de dos-factores (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un intento de autenticación usando autenticación de dos-factores ha fallado (%1$s)",
+ "Your <strong>password</strong> or <strong>email</strong> was modified" : "Tu <strong>contraseña</strong> o <strong>correo electrónico</strong> ha sido modificado",
+ "Your apps" : "Tus aplicaciones",
+ "Updates" : "Actualizaciones",
+ "Enabled apps" : "Aplicaciones habilitadas",
+ "Disabled apps" : "Aplicaciones deshabilitadas",
+ "App bundles" : "Paquetes de aplicación",
+ "Wrong password" : "Contraseña incorrecta",
+ "Saved" : "Guardado",
+ "No user supplied" : "No se proporcionó usuario alguno",
+ "Unable to change password" : "No fue posible cambiar la contraseña",
+ "Authentication error" : "Error de autenticación",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Por favor proporciona una contraseña de recuperación de administrador; de lo contrario toda la información del usuario se perderá. ",
+ "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Por favor verificala e inténtalo de nuevo.",
+ "Backend doesn't support password change, but the user's encryption key was updated." : "El backend no soporta el cambio de contraseñas, pero la llave de encripción del usuario fue actualizada.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "Instalando y actualizando aplicaciones por la tienda de aplicaciones o Compartido la Nube Federada",
+ "Federated Cloud Sharing" : "Compartir en la Nube Federada",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando una versión anticuada (%s) de %s. Por favor actualiza tu sistema operativo o funciones tales como %s no funcionarán de forma confiable.",
+ "A problem occurred, please check your log files (Error: %s)" : "Se presentó un problema, por favor verifica tus archivos de bitácoras (Error: %s)",
+ "Migration Completed" : "Migración completada",
+ "Group already exists." : "El grupo ya existe.",
+ "Unable to add group." : "No fue posible agregar el grupo.",
+ "Unable to delete group." : "No fue posible borrar el grupo.",
+ "Invalid SMTP password." : "Constraseña SMTP inválida. ",
+ "Email setting test" : "Prueba de ajustes de correo",
+ "Well done, %s!" : "¡Bien hecho, %s!",
+ "If you received this email, the email configuration seems to be correct." : "Si has recibido este correo electrónico, la configuración del correo electrónico parece estar correcta. ",
+ "Email could not be sent. Check your mail server log" : "No fue posible enviar el correo electrónico. Por favor verfica la bitácora de tu servidor de correo",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Se presentó un problema al enviar el correo electrónico. Por favor revisa tus configuraciones (Error: %s)",
+ "You need to set your user email before being able to send test emails." : "Requieres establecer tu correo electrónico antes de poder enviar correos electrónicos de prueba. ",
+ "Invalid mail address" : "Dirección de correo inválida",
+ "No valid group selected" : "No se ha seleccionado un grupo válido",
+ "A user with that name already exists." : "Un usuario con ese nombre ya existe. ",
+ "To send a password link to the user an email address is required." : "Para enviar la liga a una contraseña al usuario, se requiere de una dirección de correo electrónico.",
+ "Unable to create user." : "No fue posible crear el usuario. ",
+ "Unable to delete user." : "No fue posible eliminar el usuario.",
+ "Error while enabling user." : "Se presentó un error al habilitar el usuario. ",
+ "Error while disabling user." : "Se presentó un error al deshabilitar el usuario.",
+ "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Para poder verificar tu cuenta de Twitter, publica el siguiente tweet en Twitter (por favor asegúrarte de publicar sin ninguna línea en blanco):",
+ "In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Para poder verificar tu sitio Web, agrega el siguiente contendio a tu web-root en '.well-known/CloudIdVerificationCode.txt' (por favor asegurate de que el texto completo este en una sóla línea):",
+ "Settings saved" : "Se han guardado las configuraciones ",
+ "Unable to change full name" : "No fue posible cambiar el nombre completo",
+ "Unable to change email address" : "No fue posible cambiar la dirección de correo electrónico",
+ "Your full name has been changed." : "Tu nombre completo ha sido cambiado.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario inválido",
+ "Unable to change mail address" : "No fue posible cambiar la dirección de correo",
+ "Email saved" : "Correo electrónico guardado",
+ "%1$s changed your password on %2$s." : "%1$s cambió tu contraseña el %2$s.",
+ "Your password on %s was changed." : "Tu contraseña de %s fue cambiada. ",
+ "Your password on %s was reset by an administrator." : "Tu contraseña de %s fue restablecida por un administrador.",
+ "Password for %1$s changed on %2$s" : "La contraseña para %1$s fue cambiada el %2$s",
+ "Password changed for %s" : "La contraseña fue cambiada para %s",
+ "If you did not request this, please contact an administrator." : "Si no lo solicitaste, por favor contacta a un administrador. ",
+ "%1$s changed your email address on %2$s." : "%1$s cambió tu dirección de correo electrónico el %2$s.",
+ "Your email address on %s was changed." : "Tu dirección de correo electrónico en %s fue cambiada. ",
+ "Your email address on %s was changed by an administrator." : "Tu dirección de correo electrónico en %s fue cambiada por un adminsitrador. ",
+ "Email address for %1$s changed on %2$s" : "La dirección de correo electrónico para %1$s fue cambiada el %2$s",
+ "Email address changed for %s" : "La dirección de correo electrónico fue cambiada para %s",
+ "The new email address is %s" : "La nueva dirección de correo electrónico es %s",
+ "Your %s account was created" : "Tu cuenta %s ha sido creada",
+ "Welcome aboard" : "Bienvenido a bordo",
+ "Welcome aboard %s" : "Bienvenido a bordo %s",
+ "You now have an %s account, you can add, protect, and share your data." : "Ahora tienes una cuenta %s, puedes agregar, proteger y compartir tus datos.",
+ "Your username is: %s" : "Tu Usuario es: %s",
+ "Set your password" : "Establece tu contraseña",
+ "Go to %s" : "Ir a %s",
+ "Install Client" : "Instalar el cliente",
+ "Password confirmation is required" : "Se requiere la confirmación de la contraseña",
+ "Couldn't remove app." : "No fue posible eliminar la aplicación. ",
+ "Couldn't update app." : "No fue posible actualizar la aplicación.",
+ "Are you really sure you want add {domain} as trusted domain?" : "¿Realmente estás seguro que quieres agregar a {domain} como un dominio de confianza?",
+ "Add trusted domain" : "Agregar un dominio de confianza",
+ "Migration in progress. Please wait until the migration is finished" : "La migración está en curso. Por favor espera hasta que termine la migración",
+ "Migration started …" : "La migración ha comenzado ...",
+ "Not saved" : "No guardado",
+ "Sending…" : "Enviando...",
+ "Email sent" : "Correo electrónico enviado",
+ "Official" : "Oficial",
+ "All" : "Todos",
+ "Update to %s" : "Actualizar a %s",
+ "No apps found for your version" : "No se encontraron aplicaciones para tu versión",
+ "The app will be downloaded from the app store" : "La aplicación será descargada de la tienda de aplicaciones <app store>",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las aplicaciones oficiales son desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad centralizada y se encuentran listas para ser usadas en producción. ",
+ "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Las aplicaciones aprobadas son desarrolladas por desarrolladores de confianza y han pasado una verificación de seguridad. Se les brinda mantenimiento activamente en un repositorio de código abierto y los mantenedores las consideran estables para un uso casual a normal. ",
+ "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Esta aplicación no cuenta con una verificación contra temas de seguridad y es nueva o se sabe que es instable. Instalala bajo tu propio riesgo. ",
+ "Disabling app …" : "Deshabilitando la aplicación ...",
+ "Error while disabling app" : "Se presentó un error mientras se deshabilitaba la aplicación",
+ "Disable" : "Deshabilitar",
+ "Enable" : "Habilitar",
+ "Enabling app …" : "Habilitando aplicación ...",
+ "Error while enabling app" : "Se presentó un error al habilitar la aplicación",
+ "Error: This app can not be enabled because it makes the server unstable" : "Error: Esta aplicación no puede ser habilitada porque genera inestabilidad en el servidor",
+ "Error: Could not disable broken app" : "Error: No fue posible deshabilitar la aplicación rota",
+ "Error while disabling broken app" : "Se presentó un error al deshabilitar la aplicación rota",
+ "No app updates available" : "No hay actualizaciones disponibles de la aplicación ",
+ "Updating...." : "Actualizando....",
+ "Error while updating app" : "Se presentó un error al actualizar la aplicación",
+ "Updated" : "Actualizado",
+ "Removing …" : "Eliminando ...",
+ "Error while removing app" : "Se presentó un error al eliminar la aplicación",
+ "Remove" : "Eliminar",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación está habilitada pero necesita ser actualizada. Serás redireccionado a la página de actualización en 5 segundos. ",
+ "App update" : "Actualización de la aplicación",
+ "Approved" : "Aprobado",
+ "Experimental" : "Experimental",
+ "No apps found for {query}" : "No se encontraron aplicaciones para {query}",
+ "Enable all" : "Habilitar todo",
+ "Allow filesystem access" : "Permitir acceso al sistema de archivos",
+ "Disconnect" : "Desconectar",
+ "Revoke" : "Revocar",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome para Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "Cliente iOS",
+ "Android Client" : "Cliente Android",
+ "Sync client - {os}" : "Sync client - {os}",
+ "This session" : "Esta sesión",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Copiado!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presiona ⌘-C para copiar. ",
+ "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.",
+ "Error while loading browser sessions and device tokens" : "Se presentó un error al cargar las sesiones de tu navegador y las fichas de los dispositivos.",
+ "Error while creating device token" : "Se presentó un error al crear la ficha en el dispositivo",
+ "Error while deleting the token" : "Se presentó un error al borrar la ficha",
+ "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}",
+ "Delete" : "Borrar",
+ "Local" : "Local",
+ "Private" : "Privado",
+ "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",
+ "Verify" : "Verificar",
+ "Verifying …" : "Verificando ...",
+ "An error occured while changing your language. Please reload the page and try again." : "Se presentó un error al cambiar tu idioma. Por favor vuelve a cargar la página y vuelva a intentarlo. ",
+ "Select a profile picture" : "Selecciona una imagen de perfil",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "Groups" : "Grupos",
+ "Unable to delete {objName}" : "No fue posible borrar {objName}",
+ "Error creating group: {message}" : "Se presentó un error al crear el grupo: {message}",
+ "A valid group name must be provided" : "Debes proporcionar un nombre de grupo válido",
+ "deleted {groupName}" : "borrado {groupName}",
+ "undo" : "deshacer",
+ "{size} used" : "{size} usado",
+ "never" : "nunca",
+ "deleted {userName}" : "borrado {userName}",
+ "No user found for <strong>{pattern}</strong>" : "No se encontraron usuarios para <strong>{pattern}</strong>",
+ "Unable to add user to group {group}" : "No fue posible agregar el usuario al grupo {group}",
+ "Unable to remove user from group {group}" : "No fue posible eliminar el usuario del grupo {group}",
+ "Add group" : "Agregar grupo",
+ "Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"",
+ "no group" : "sin grupos",
+ "Password successfully changed" : "La contraseña se cambió exitosamente",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "El cambiar la contraseña puede generar pérdida de datos, porque la recuperación de datos no está disponible para este usuario",
+ "Could not change the users email" : "No fue posible cambiar el correo electrónico del usuario. ",
+ "Error while changing status of {user}" : "Se presentó un error al cambiar el estatus del usuario {user}",
+ "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Error creating user: {message}" : "Se presentó un error al crear el usuario: {message}",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
+ "Developer documentation" : "Documentación del desarrollador",
+ "View in store" : "Ver en la tienda",
+ "Limit to groups" : "Limitar a grupos",
+ "by %s" : "por %s",
+ "%s-licensed" : "%s-licensed",
+ "Documentation:" : "Documentación:",
+ "User documentation" : "Documentación del usuario",
+ "Admin documentation" : "Documentación del administrador",
+ "Visit website" : "Visita el sitio web",
+ "Report a bug" : "Reporta un detalle",
+ "Show description …" : "Mostrar descripción ...",
+ "Hide description …" : "Ocultar descripción ...",
+ "This app has an update available." : "Esta aplicación tiene una actualización disponible.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:",
+ "Enable only for specific groups" : "Habilitar sólo para grupos específicos",
+ "SSL Root Certificates" : "Certificado SSL Raíz",
+ "Common Name" : "Nombre común",
+ "Valid until" : "Válido hasta",
+ "Issued By" : "Levantado Por",
+ "Valid until %s" : "Válido hasta %s",
+ "Import root certificate" : "Importar certificado raíz",
+ "Administrator documentation" : "Documentación del adminsitrador",
+ "Online documentation" : "Documentación en línea",
+ "Forum" : "Foro",
+ "Getting help" : "Obtener ayuda",
+ "Commercial support" : "Soporte comercial",
+ "None" : "Ninguno",
+ "Login" : "Iniciar sesión",
+ "Plain" : "Plano",
+ "NT LAN Manager" : "Administrador de LAN NT",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "Servidor de correo electrónico",
+ "Open documentation" : "Abrir documentación",
+ "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es importante preparar este servidor para poder enviar correos electrónicos, como para restablecer contraseñas y notificaciones. ",
+ "Send mode" : "Modo de envío",
+ "Encryption" : "Encripción",
+ "From address" : "De la dirección",
+ "mail" : "correo",
+ "Authentication method" : "Método de autenticación",
+ "Authentication required" : "Autenticación requerida",
+ "Server address" : "Dirección del servidor",
+ "Port" : "Puerto",
+ "Credentials" : "Credenciales",
+ "SMTP Username" : "Usuario SMTP",
+ "SMTP Password" : "Contraseña SMTP",
+ "Store credentials" : "Almacenar credenciales",
+ "Test email settings" : "Probar las configuraciones de correo electrónico",
+ "Send email" : "Enviar correo electrónico",
+ "Server-side encryption" : "Encripción del lado del servidor",
+ "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." : "La encripción del lado del servidor hace posible encriptar archivos que serán cargados a este servidor. Esto trae consigo algunas limitaciónes como penalizaciones en el desemeño, asi que habilítalo sólo si es necesario. ",
+ "Enable server-side encryption" : "Habilitar encripción del lado del servidor",
+ "Please read carefully before activating server-side encryption: " : "Por favor lee detenidamente antes de activar la encripción del lado de servidor:",
+ "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." : "Una vez que la encripción se encuentre habilitada, todos lo archivos cargados al servidor desde ese momento en tiempo, se encriptarán en el servidor. Sólo será posible deshabilitar la encripción en una fecha posterior si el modulo de encripción activo soporta esa funcionalidad y si todas las preciondiciones están satisfechas (ejem. establecer una llave de recuperación).",
+ "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." : "La encripción por sí sola no garantiza la seguridad del sistema. Por favor consulta la documentación para mayores informes de cómo funciona la aplicación de encripción y de los casos de uso soportados. ",
+ "Be aware that encryption always increases the file size." : "Por favor considera que la encripción siempre aumenta el tamaño de los archivos. ",
+ "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Siempre es una buena idea generar respaldos de tus datos, en caso de tener encripción asegúrate de respaldar las llaves de encripción junto con tus datos. ",
+ "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final: ¿Realmente deseas habilitar la encripción?",
+ "Enable encryption" : "Habilitar encripción",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado un módulo de encripción, por favor habilita un módulo de encripción en el menú de la aplicación. ",
+ "Select default encryption module:" : "Selecciona el modulo de encripción predeterminado:",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesitas migrar tus llaves de encripción de la encripción anterior (ownCloud <= 8.0) a la actual. Por favor habilita el \"Módulo de encripción predeterminado\" y ejecuta el comando 'occ encryption:migrate'",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Necesitas migar tus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la actual. ",
+ "Start migration" : "Iniciar migración",
+ "Security & setup warnings" : "Advertencias de seguridad y configuración",
+ "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 Tips & Tricks section and the documentation for more information." : "Es importante que todo esté configurado correctamente por la seguridad y desempeño de tu instancia. Para ayudarte con esto, estamos haciendo unas validaciones automáticas. Por favor ve la sección de Consejos y Trucos así como la documentación para más información.",
+ "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP no parece estar configurado correctamente para consultar las variables de ambiente. La prueba con getenv(\"PATH\") sólo regresa una respuesta vacía.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "Por favor verifica la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> en relación a las notas de configuración de PHP y la configuración de PHP en tu servidorr, especialmente cuando se usa 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." : "La configuración de Sólo Lectura ha sido habilitada. Esto previene establecer algunas configuraciones mediante la interface web. Adicionalmente, el archivo necesita que se le establezca tener permisos de escritura manualmente en cada actualización. ",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques internos de documentación. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto es posiblemente causado por un caché/acelerador tal como Zend OPcache o eAccelerator. ",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Tu base de datos no puede correr con el nivel de aislamiento de transacción de \"READ COMMITTED\". Puede causar problemas cuando mútiples acciones sean ejecutadas en paralelo.",
+ "%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version." : "%1$s con versión inferior a %2$s está instalado, por razones de estabilidad y desempeño te recomendamos actualizar a una versión de %1$s más reciente. ",
+ "The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Recomendamos ámpliamente que se habilite este módulo para obtener los mejores resultados en la detección de tipos 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 <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "El bloqueo de archivos transaccional se encuentra deshabilitado, esto puede generar temas bajo ciertas condiciones. Habilita 'filelocking.enabled' en el archivo config.php para evitar problemas. Por favor consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatcón ↗</a> para más información.",
+ "System locale can not be set to a one which supports UTF-8." : "No es posible establecer la regionalización del sistema a una que soporte UTF-8.",
+ "This means that there might be problems with certain characters in filenames." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de archivos. ",
+ "It is strongly proposed to install the required packages on your system to support one of the following locales: %s." : "Se recomienda ámpliamente instalar los paquetes requeridos en tu sistema para soportar alguna de las siguientes regionalizaciones: %s.",
+ "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 (Suggested: \"%s\")" : "Si tu instalación no se hizo en la raíz del dominio y usa el sistema Cron, puede haber temas con la generación de la URL. Para prevenir estos problemas, por favor establece la opción \"overwrite.cli.url\" en tu archivo config.php a la ruta del webroot de tu instalación (Se sugiere: \"%s\")",
+ "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "No fue posible ejecutar el trabajo de cron via CLI. Se presentaron los siguientes errores técnicos:",
+ "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Por favor vuelve a verificar las <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guías de instalación↗</a>, y comprueba que no haya errores o advertenicas en la <a href=\"%s\">bitácora</a>.",
+ "All checks passed." : "Pasaron todas las verificaciones. ",
+ "Background jobs" : "Trabajos en segundo plano",
+ "Last job ran %s." : "El último trabajo corrió %s.",
+ "Last job execution ran %s. Something seems wrong." : "La última ejecución del trabajo corrió %s. Algo parece estar mal. ",
+ "Background job didn’t run yet!" : "¡El trabajo de segundo plano aún no ha corrido!",
+ "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Para un desempeño ideal, es importante configurar los trabajos de fondo correctamente. Para instancias más grandes 'Cron' es la configuración recomendada. Por favor consulta la documentación para más información. ",
+ "Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over HTTP." : "cron.php está registrado en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP. ",
+ "Use system cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos. ",
+ "The cron.php needs to be executed by the system user \"%s\"." : "El cron.php necesita ser ejecutado por el usuario de sistema \"%s\".",
+ "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión POSIX de PHP. Por favor ve la {linkstart}documentación de PHP{linkend} para más detalles. ",
+ "Version" : "Versión",
+ "Sharing" : "Compartiendo",
+ "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, puedes hacer ajustes finos al comportamiento de compartir. Por favor consulta la documentación para más información. ",
+ "Allow apps to use the Share API" : "Permitir que las aplicaciones usen el API para Compartir",
+ "Allow users to share via link" : "Permitir a los usuarios compartir mediante ligas",
+ "Allow public uploads" : "Permitir cargas públicas",
+ "Always ask for a password" : "Siempre pedir una contraseña",
+ "Enforce password protection" : "Forzar protección de contraseñas",
+ "Set default expiration date" : "Establecer la fecha de expiración predeterminada",
+ "Expire after " : "Expirar después de",
+ "days" : "días",
+ "Enforce expiration date" : "Forzar fecha de expiración",
+ "Allow resharing" : "Permitir volver 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 sólo compartir con otros usuarios en sus grupos",
+ "Exclude groups from sharing" : "Evitar que los grupos compartan",
+ "These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir elementos compartidos, pero no los podrán iniciar.",
+ "Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Permitir el autocompletado de usuarios en la ventana de diálogo de compartir. Si esto está deshabilitado, se deberá ingresar el correo electrónico o nombre completo. ",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar el texto de exención de responsabilidad legal en la página de carga de ligas públicas. (Sólo 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 carga de la liga pública cuando la lista de archivos esté oculta. ",
+ "Tips & tricks" : "Consejos & trucos",
+ "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Existen muchas funcionalidades y configuraciones disponibles para personalizar y usar de manera óptima esta instancia. Aquí hay algunos consejos para más información. ",
+ "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente estás usando SQLite como el backend de base de datos. Para instalaciones más grandes te recomendamos cambiar a un backend de base de datos diferente.",
+ "This is particularly recommended when using the desktop client for file synchronisation." : "Esto es particularmente recomendado cuando se usa el cliente de escritorio para sincronización de archivos. ",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos, usa la herramienta de la línea de comando 'occ db:convert-type', o consulta la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.",
+ "How to do backups" : "Cómo hacer respaldos",
+ "Advanced monitoring" : "Monitoreo avanzado",
+ "Performance tuning" : "Optimización de rendimiento",
+ "Improving the config.php" : "Mejorando la config.php",
+ "Theming" : "Tematizar",
+ "Check the security of your Nextcloud over our security scan" : "Verifica la seguridad de tu Nextcloud con nuestro escaneo de seguridad",
+ "Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
+ "Personal" : "Personal",
+ "Administration" : "Administración",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Estás usando <strong>%s</strong> de <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Estás usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
+ "Profile picture" : "Foto de perfil",
+ "Upload new" : "Cargar nuevo",
+ "Select from Files" : "Seleccionar desde Archivos",
+ "Remove image" : "Eliminar imagen",
+ "png or jpg, max. 20 MB" : "png o jpg max. 20 MB",
+ "Picture provided by original account" : "Imagen proporcionada por la cuenta original ",
+ "Cancel" : "Cancelar",
+ "Choose as profile picture" : "Seleccionar como foto del perfil",
+ "Full name" : "Nombre completo",
+ "No display name set" : "No se ha establecido el nombre a desplegar",
+ "Email" : "Correo electrónico",
+ "Your email address" : "Tu dirección de correo electrónico",
+ "No email address set" : "No se ha establecido la dirección de correo electrónico",
+ "For password reset and notifications" : "Para restablecer contraseña y notificaciones",
+ "Phone number" : "Número de teléfono",
+ "Your phone number" : "Su número telefónico",
+ "Address" : "Dirección",
+ "Your postal address" : "Tu dirección postal",
+ "Website" : "Sitio web",
+ "It can take up to 24 hours before the account is displayed as verified." : "Puede tomar hasta 24 horas antes de que la cuenta se muestre como verificada. ",
+ "Link https://…" : "Liga https:// ...",
+ "Twitter" : "Twitter",
+ "Twitter handle @…" : "Cuenta de twitter @...",
+ "You are member of the following groups:" : "Eres miembro de los siguientes grupos:",
+ "Language" : "Idioma",
+ "Help translate" : "Ayuda a traducir",
+ "Password" : "Contraseña",
+ "Current password" : "Contraseña actual",
+ "New password" : "Nueva contraseña",
+ "Change password" : "Cambiar contraseña",
+ "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, de escritorio y móviles han iniciado sesión en tu cuenta. ",
+ "Device" : "Dispositivo",
+ "Last activity" : "Última actividad",
+ "App name" : "Nombre de la aplicación",
+ "Create new app password" : "Crear una nueva contraseña de aplicación",
+ "Use the credentials below to configure your app or device." : "Usa las siguientes credenciales para configurar tu aplicación o dispositivo. ",
+ "For security reasons this password will only be shown once." : "Por razones de seguridad esta contraseña sólo se mostrará una vez. ",
+ "Username" : "Usuario",
+ "Done" : "Terminado",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google+" : "Síguenos en Google+",
+ "Like our Facebook page" : "Da un Like a nuestra página de Facebook",
+ "Follow us on Twitter" : "Síguenos en Twitter",
+ "Check out our blog" : "Visita nuestro blog",
+ "Subscribe to our newsletter" : "Suscribete a nuestro boletín",
+ "Settings" : "Configuraciones ",
+ "Show storage location" : "Mostrar la ubicación del almacenamiento",
+ "Show user backend" : "Mostrar backend del usuario",
+ "Show last login" : "Mostrar último inicio de sesión",
+ "Show email address" : "Mostrar dirección de correo electrónico",
+ "Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
+ "When the password of a new user is left empty, an activation email with a link to set the password is sent." : "Cuando la contraseña de un usuario nuevo se deja en blanco, se envía un correo electrónico de activación con una liga para establecerla. ",
+ "E-Mail" : "Correo electrónico",
+ "Create" : "Crear",
+ "Admin Recovery Password" : "Recuperación de la contraseña del administrador",
+ "Enter the recovery password in order to recover the users files during password change" : "Ingresa la contraseña de recuperación con la finalidad de recuperar los archivos de los usuarios al cambiar la contraseña.",
+ "Everyone" : "Todos",
+ "Admins" : "Administradores",
+ "Disabled" : "Deshabilitado",
+ "Default quota" : "Cuota predeterminada",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indica la cuota de almacenamiento (ejem: \"512 MB\" ó \"12 GB\")",
+ "Unlimited" : "Ilimitado",
+ "Other" : "Otro",
+ "Group admin for" : "Administrador del grupo para",
+ "Quota" : "Cuota",
+ "Storage location" : "Úbicación del almacenamiento",
+ "User backend" : "Backend del usuario",
+ "Last login" : "Último inicio de sesión",
+ "change full name" : "cambiar el nombre completo",
+ "set new password" : "establecer nueva contraseña",
+ "change email address" : "cambiar la dirección de correo electrónico",
+ "Default" : "Predeterminado",
+ "Enabled" : "Habilitado",
+ "Not enabled" : "No habilitado",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor proporciona una contraseña de recuperación de administrador, de lo contrario se perderán todos los datos de usuario",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "El backend no soporta el cambio de contraseñas, pero la llave de encripción del usuario fue actualizada exitosamente.",
+ "test email settings" : "probar las configuraciones del correo electrónico",
+ "Invalid request" : "Solicitud inválida",
+ "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No fue posible eliminar el usuario del grupo %s",
+ "Sending..." : "Enviando...",
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Usted tiene %n actualización de la aplicación pendiente","Tienes %n actualizaciones de la aplicación pendientes"],
+ "Uninstalling ...." : "Desinstalando ...",
+ "Error while uninstalling app" : "Se presentó un error al desinstalar la aplicación",
+ "Uninstall" : "Desinstalar",
+ "__language_name__" : "Español (México)",
+ "Personal info" : "Información personal",
+ "Sessions" : "Sesiones",
+ "App passwords" : "Contraseñas de aplicación",
+ "Sync clients" : "Sincronizar clientes",
+ "This is used for sending out notifications." : "Esto se usa para enviar notificaciones",
+ "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Al parecer php no está correctamente configurado para consultar las variables de ambiente. La prueba con getenv(\"PATH\") solo está regresando una respuesta vacía. ",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Favor de consultar la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para las notas de configuración de php en tu servidor, específicamente al usar php-fpm. ",
+ "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Al parecer PHP está configurado para quitar los bloques de comentarios internos. Esto hará que varias aplicaciones principales sean inaccesibles. ",
+ "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s con versión inferior a %2$s está instalado, por razones de estabilidad y desempeño te recomendamos actualizar a una versión de %1$s mas reciente. ",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Te recomendamos ámpliamente que habilites este módulo para obtener los mejores resultados en la detección de tipos MIME.",
+ "This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Te sugerimos ámpliamente instalar en tu sistema los paquetes requeridos para soportar alguno de los sigueintes locales: %s.",
+ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si tu instalacion no fue hecha en la raíz del dominio y usa el cron del sistema, pueden presentarse temas con la generación de URLs. Para evitar estos problemas, por favor establece la opción \"overwrite.cli.url\" en tu archivo config.php a la ruta del webroot de tu instalación (Se sugiere : \"%s\")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar la tarea de cron con CLI. Se presentaron los siguientes errores técnicos:",
+ "Cron" : "Cron",
+ "Last cron job execution: %s." : "Última ejecución de tareas de cron: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Última ejecución de tareas de cron: %s. Algo parece estar mal. ",
+ "Cron was not executed yet!" : "¡Aún no han sido ejecutado el cron!",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio de cron del sistema para llamar el archivo cron.php cada 15 minutos.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto necesitas la extensión posix de PHP. Por favor consulta la {linkstart}documentación de PHP{linkend} para más detalles. ",
+ "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir auto-completar el nombre de usuario en la ventana de diálogo. Si esta opción está deshabilitada, el nombre de usuario completo debe ser ingresado.",
+ "Uninstall app" : "Desinstalar la aplicación",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hola,<br><br> sólo queremos informarte que ahora tienes una cuenta %s.<br><br> Tu usuario es: <strong>%s</strong> <br>Ingresa a ella: <strong><a href=\"%s\">%s</a></strong><br><br>",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola,\n\nsólo queremos informarte que ahora tienes una cuenta %s.\n\nTu usuario es: %s\n\nIngresa a ella: %s\n",
+ "For password recovery and notifications" : "Para recuperación de contraseña y notificaciones",
+ "Your website" : "Tu sitio web",
+ "Your Twitter handle" : "Tu cuenta de Twitter",
+ "Get the apps to sync your files" : "Obten las aplicaciones para sincronizar tus archivos",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "Aplicación android",
+ "iOS app" : "Aplicación iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "¡Si deseas apoyar al proyecto {contributeopen} únete al desarrollo{linkclose} o {contributeopen} pasa la voz {linkclose}!",
+ "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de Ejecución Inicial",
+ "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a tu cuenta. ",
+ "Name" : "Nombre",
+ "Follow us on Google Plus!" : "¡Sígueos en Google Plus!",
+ "Like our facebook page!" : "¡Dale un me gusta a nuestra página de facebook!",
+ "Subscribe to our twitter channel!" : "¡Suscríbete a nuestro canal de twitter!",
+ "Subscribe to our news feed!" : "¡Suscríbete a nuestra fuente de noticias!",
+ "Subscribe to our newsletter!" : "¡Suscríbete a nuestro boletín!",
+ "Show last log in" : "Mostrar el último inicio de sesión",
+ "Group name" : "Nombre del grupo",
+ "You have now an %s account, you can add, protect, and share your data." : "Ahora tienes una cuenta %s, puedes agregar, proteger y compartir tus datos. ",
+ "Verifying" : "Verificando",
+ "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 Tips & Ticks section and the documentation for more information." : "Es importante para la seguridad y desempeño de su instancia que todo esté configurado correctamente. Para ayudarlo con esto, estamos haciendo algunas verficaciones automáticas. Por favor consulta la sección de Consejos & Trucos de la documentación para más información. ",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with MIME type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Te recomendamos ámpliamente que habilites este módulo para obtener los mejores resultados en la detección de tipos MIME.",
+ "Web, desktop, mobile clients and app specific passwords that currently have access to your account." : "A continuación se presenta un listado de las sesiones, dispositivos y eventos que se han presentado en tu cuenta. ",
+ "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Aquí puedes generar contraseñas individuales para las aplicaciones para que no tengas que dar tu contraseña. También puedes revocalras individualmente. ",
+ "Follow us on Google+!" : "¡Síguenos en Google+!",
+ "Follow us on Twitter!" : "¡Síguenos en Twitter!",
+ "Check out our blog!" : "¡Visita nuestro blog!"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index ee358bffe70..3748978398b 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"A login attempt using two-factor authentication failed (%1$s)" : "Bi urratseko egiaztapenaren bidezko saioa hasteko ahaleginak huts egin du (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Zure pasahitza edo e-posta helbidea aldatu da",
"Your apps" : "Zure aplikazioak",
+ "Updates" : "Eguneraketak",
"Enabled apps" : "Gaitutako aplikazioak",
"Disabled apps" : "Gaitu gabeko aplikazioak",
"App bundles" : "Aplikazio sortak",
@@ -102,6 +103,7 @@ OC.L10N.register(
"Error: This app can not be enabled because it makes the server unstable" : "Errorea: aplikazioa hau ezin da gaitu zerbitzaria ezegonkor izatea egiten duelako",
"Error: Could not disable broken app" : "Errorea: ezin da hondatutako aplikazioa desgaitu",
"Error while disabling broken app" : "Errorea hondatutako aplikazioa desgaitzerakoan",
+ "No app updates available" : "Ez dago app-aren eguneraketarik eskuragarri",
"Updating...." : "Eguneratzen...",
"Error while updating app" : "Errorea aplikazioa eguneratzen zen bitartean",
"Updated" : "Eguneratuta",
@@ -181,6 +183,8 @@ OC.L10N.register(
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"A valid email must be provided" : "Baliozko posta elektronikoa eman behar da",
"Developer documentation" : "Garatzailearen dokumentazioa",
+ "View in store" : "Dendan ikusi",
+ "Limit to groups" : "Taldeetara mugatu",
"by %s" : "by %s",
"%s-licensed" : "%s-lizentziapean",
"Documentation:" : "Dokumentazioa:",
@@ -214,6 +218,7 @@ OC.L10N.register(
"STARTTLS" : "STARTTLS",
"Email server" : "E-posta zerbitzaria",
"Open documentation" : "Ireki dokumentazioa",
+ "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Zerbitzaria epostak bidaltzeko gai izatea garrantzitsua da, pasahitzak berrezartzeko eta abisuentzako",
"Send mode" : "Bidaltzeko modua",
"Encryption" : "Enkriptazioa",
"From address" : "Helbidetik",
@@ -229,6 +234,7 @@ OC.L10N.register(
"Test email settings" : "Probatu eposta ezarpenak",
"Send email" : "Bidali eposta",
"Server-side encryption" : "Zerbitzariaren aldeko enkriptaketa",
+ "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." : "Zerbitzari-aldeko enkriptazioak zerbitzarira igotzen diren fitxategiak enkriptatzeabaimentzen du. Honek eraginkortasuna jaitsi dezake, beraz gaitu beharrezkoa bada soilik. ",
"Enable server-side encryption" : "Gaitu zerbitzariaren aldeko enkriptaketa",
"Please read carefully before activating server-side encryption: " : "Mesedez, irakurri arretaz zerbitzariaren aldeko enkriptaketa gaitu aurretik:",
"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." : "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.",
@@ -237,18 +243,42 @@ OC.L10N.register(
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.",
"This is the final warning: Do you really want to enable encryption?" : "This is the final warning: Do you really want to enable encryption?",
"Enable encryption" : "Gaitu enkriptatzea",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Ez da enkriptazio modulurik kargatu, mesedez enkriptazio modulu bat gaitu app-en menuan. ",
+ "Select default encryption module:" : "Defektuzko enkriptazio modulua hautatu:",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Enkriptazio gakoak enkriptazio sistema zaharretik (ownCloud <=8.0) sistema berrira migratu behar duzu. Gaitu mesedez \" Defektuzko enkriptazio modulua\" eta 'occ encryption:migrate' exekuta ezazu",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Enkriptazio gakoak sistema zaharretik (ownCloud <=8.0) berrira migratu behar duzu",
+ "Start migration" : "Migrazioa hasi",
"Security & setup warnings" : "Segurtasun eta konfigurazio abisuak",
+ "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 Tips & Tricks section and the documentation for more information." : "Zure instantzia ondo konfiguratzea garrantzitsua da segurasun eta errendimendurako. Honekin laguntzeko test automatiko batzuk garatzen ari gara. Dokumentazioaren Tips & Tricks atala ikusi informazio gehiagorako. ",
+ "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : " Sistemako ingurune aldagaiak atzitzeko PHP ez dago ondo konfiguratua. getenv(\"PATH\") testeatzean erantzun hutsa jasotzen da. ",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalazio dokumentazioa ↗</a> begiratu PHP konfigurazio oharrak eta zerbitzariaren PHP konfigurazioa ulertzeko, batez ere php-fpm erabiltzen bada",
"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." : "Bakarrik irakurtzeko konfigurazioa gaitu da. Honek web-interfazearen bidez konfigurazio batzuk aldatzea ekiditzen du. Are gehiago, fitxategia eskuz ezarri behar da idazteko moduan eguneraketa bakoitzerako.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP lerro bakarreko blokeak mozteko konfiguratua dagoela dirudi. Oinarrizko app batzuk eskuraezin bihurtuko dira.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Zure datubaseak ez du \"READ COMMITTED\" transakzio isolamendu mailarik. Honek arazoak sor dezake paraleloki ekintza asko exekutatzen badira. ",
+ "%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version." : "%1$aren %2 bertsio zaharkitua instalatua dago, egonkortasun eta errendimendu arrazoiak medio, %1 bertsiora eguneratzea gomendatzen da.",
+ "The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "'fileinfo' PHP modulua falta da. Modulu hau gaitzea bereziki gomendatzen da, MIME moten detekzioan emaitzarik hoberenak edukitzeko.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Fitxategien blokeo transakzionala desgaituta dago, eta lasterketa baldintzak gerta daitezke. config.php fitxategiko 'filelocking.enable' gaitu arazo hauek ekiditeko. <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentazioa ↗</a> kontsultatu informazio gehiagorako.",
"System locale can not be set to a one which supports UTF-8." : "Eskualdeko ezarpena ezin da UTF-8 onartzen duen batera ezarri.",
+ "This means that there might be problems with certain characters in filenames." : "Honek fitxategi izenen karaktere batzuekin arazoak egon daitezkeela esan nahi du. ",
+ "It is strongly proposed to install the required packages on your system to support one of the following locales: %s." : "Ondoko lokalizazioentzako euskarria izateko, zure sisteman beharrezko paketeak instalatzea bereziki gomendatzen da: %s.",
"All checks passed." : "Egiaztapen guztiak gaindituta.",
+ "Background jobs" : "Atzeko planoko lanak",
+ "Last job ran %s." : "Azken lana %s itzuli zuen. ",
+ "Last job execution ran %s. Something seems wrong." : "Azken lanaren exekuzioak %s itzuli zuen. Zerbait gaizki joan da ",
+ "Background job didn’t run yet!" : "Atzeko planoko lana ez da martxan jarri oraindik!",
"Execute one task with each page loaded" : "Exekutatu zeregin bat orri karga bakoitzean",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over HTTP." : "cron.php webcrom zerbitzu bezala erregistratua dago, cron.php 15 minuturo HTTP bidez deitu ahal izateko.",
+ "Use system cron service to call the cron.php file every 15 minutes." : "Sistemaren cron zerbitzua erabili cron.php 15 minuturo deitzeko.",
"The cron.php needs to be executed by the system user \"%s\"." : "Sistemako \"%s\" erabiltzaileak, cron.php exekutatu behar du.",
+ "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Hau exekutatzeko PHP POSIX luzapena behar duzu. {linkstart}PHP dokumentazioa{linkend} ikusi informazio gehiagorako",
"Version" : "Bertsioa",
"Sharing" : "Partekatzea",
+ "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Admin bezala partekatze portaerak zehazki konfigura daitezke. Dokumentazioaikusi informazio gehiagorako. ",
"Allow apps to use the Share API" : "Baimendu aplikazioak partekatzeko APIa erabiltzeko",
"Allow users to share via link" : "Baimendu erabiltzaileak esteken bidez partekatzea",
"Allow public uploads" : "Baimendu igoera publikoak",
+ "Always ask for a password" : "Beti eskatu pasahitza",
"Enforce password protection" : "Betearazi pasahitzaren babesa",
"Set default expiration date" : "Ezarri muga data lehenetsia",
"Expire after " : "Iraungia honen ondoren",
@@ -267,11 +297,15 @@ OC.L10N.register(
"Improving the config.php" : "config.php hobetzen",
"Theming" : "Itxura",
"Hardening and security guidance" : "Gogortze eta segurtasun gida",
+ "Personal" : "Pertsonala",
+ "Administration" : "Administrazioa",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Zuk <strong>%s</strong> erabiltzen ari zara <strong>%s</strong>-tik",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> erabiltzen ari zara,<strong>%s</strong>-koa (<strong>%s %%</strong>)",
"Profile picture" : "Zure irudia",
"Upload new" : "Igo berria",
"Select from Files" : "Aukeratu fitxategien artean",
"Remove image" : "Irudia ezabatu",
+ "png or jpg, max. 20 MB" : "png edo jpg, gehienez 20MB",
"Picture provided by original account" : "Irudia jatorrizko kontutik hartuta",
"Cancel" : "Ezeztatu",
"Choose as profile picture" : "Aukeratu profil irudi gisa",
@@ -286,7 +320,10 @@ OC.L10N.register(
"Address" : "Helbidea",
"Your postal address" : "Zure helbidea",
"Website" : "Web orria",
+ "It can take up to 24 hours before the account is displayed as verified." : "24 ordu pasa daitezke kontua ziurtatua bezala agertu baino lehen",
+ "Link https://…" : "https://... esteka",
"Twitter" : "Twitter",
+ "Twitter handle @…" : "Twitter heldulekua @...",
"You are member of the following groups:" : "Zuk honako talde kide zara:",
"Language" : "Hizkuntza",
"Help translate" : "Lagundu itzultzen",
@@ -303,8 +340,15 @@ OC.L10N.register(
"For security reasons this password will only be shown once." : "Segurtasun arrazoiengatik, pasahitz hau behin soilik erakutsiko da.",
"Username" : "Erabiltzaile izena",
"Done" : "Egina",
+ "Follow us on Google+" : "Google+en jarrai gaitzazu",
+ "Like our Facebook page" : "Gure Facebook orrian Like egin",
+ "Follow us on Twitter" : "Jarrai gaitzazu Twitterren",
+ "Check out our blog" : "Gure bloga kontsultatu",
+ "Subscribe to our newsletter" : "Izena eman gure buletinean",
+ "Settings" : "Ezarpenak",
"Show storage location" : "Erakutsi biltegiaren kokapena",
"Show user backend" : "Bistaratu erabiltzaile motorra",
+ "Show last login" : "Azken izen ematea erakutsi",
"Show email address" : "Bistaratu eposta helbidea",
"Send email to new user" : "Bidali eposta erabiltzaile berriari",
"E-Mail" : "E-posta",
@@ -346,32 +390,46 @@ OC.L10N.register(
"App passwords" : "Aplikazioen pasahitzak",
"Sync clients" : "Sync clients",
"This is used for sending out notifications." : "Hau jakinarazpenak bidaltzeko erabiltzen da.",
+ "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistemaren ingurune aldagaiak atzitzeko ez dago ondo konfiguratua.getenv(\"PATH\") testak erantzun hutsa itzultzen du. ",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.",
"This means that there might be problems with certain characters in file names." : "Honek esan nahi du fitxategien izenetako karaktere batzuekin arazoak egon daitezkeela.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Biziki gomendatzen dizugu beharrezkoak diren paketea zure sisteman instalatzea honi euskarria eman ahal izateko: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Zure instalazioa ez badago domeinuaren sustraian egina eta erabiltzen badu sistemaren cron-a, arazoak izan daitezke URL sorreran. Arazo horiek saihesteko ezarri \"overwrite.cli.url\" opzioa zure config.php fitxategian zure instalazioaren webroot bidera (Proposatua: \"%s\")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Ezin izan da cronjob CLI moduan exekutatu. Ondoko errore teknikoak agertu dira:",
"Cron" : "Cron",
"Last cron job execution: %s." : "Azken cron lan exekuzioa: %s.",
"Last cron job execution: %s. Something seems wrong." : "Azken cron lan exekuzioa: %s. Zerbait gaizki dirudi.",
"Cron was not executed yet!" : "Cron-a oraindik ez da exekutatu!",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php webcron zerbitzu batean erregistratua dago cron.php 15 minuturo http bidez deitzeko.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Erabili sistemaren cron zerbitzua deitzeko cron.php fitxategia 15 minutuan behin.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Hau exekutatzeko PHPko posix luzapena behar duzu. Xehetasun gehiagorako {linkstart}PHP dokumentazioa{linkend} kontsulta ezazu ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Onartu elkarbanatze elkarrizketan, erabiltzaile osatze automatikoa. Desgaituta badago, erabiltzaile izena osoa sartu behar da.",
"Uninstall app" : "Desinstalatu aplikazioa",
"Cheers!" : "Ongi izan!",
"Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\nJakinarazi nahi dizugu, badaukazula %s kontua.\n\nZure erabiltzaile izena: %s \nSar zaitez: %s\n",
+ "For password recovery and notifications" : "Pasahitza berreskuratzeko eta abisuentzako",
"Your website" : "Zure web orria",
"Your Twitter handle" : "Zure Twitter erabiltzailea",
"Get the apps to sync your files" : "Lortu aplikazioak zure fitxategiak sinkronizatzeko",
"Desktop client" : "Mahaigaineko bezeroa",
"Android app" : "Android aplikazioa",
"iOS app" : "iOS aplikazioa",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Proiektuan lagundu nahi baduzu {contributeopen} garatzaileekin elkartu{linkclose} edo {contributeopen}hitza zabaldu{linkclose}!",
"Show First Run Wizard again" : "Erakutsi berriz Lehenengo Aldiko Morroia",
"Passcodes that give an app or device permissions to access your account." : "Zure kontuan sartzeko aplikazio edo gailuei baimena ematen dien pasahitzak.",
"Name" : "Izena",
+ "Follow us on Google Plus!" : "Google Plusen jarrai gaitzazu",
+ "Like our facebook page!" : "Gure Facebook orrian Like egin",
+ "Subscribe to our twitter channel!" : "Izena eman gure twitter kanalean!",
+ "Subscribe to our news feed!" : "Izena eman gure berrien jariora!",
+ "Subscribe to our newsletter!" : "Izena eman gure berrietan!",
"Show last log in" : "Erakutsi azkeneko saio hasiera",
"Group name" : "Taldearen izena",
- "You have now an %s account, you can add, protect, and share your data." : "Orain baduzu %s kontu bat, zure datuak gehitu, babestu eta parteka ditzakezu."
+ "You have now an %s account, you can add, protect, and share your data." : "Orain baduzu %s kontu bat, zure datuak gehitu, babestu eta parteka ditzakezu.",
+ "Verifying" : "Konprobatzen",
+ "Follow us on Google+!" : "Jarrai gaitzazu Google+en!",
+ "Follow us on Twitter!" : "Jarrai gaitzazu Twitterren!",
+ "Check out our blog!" : "Gure blogean sartu!"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index a3e9772330a..96c09852d00 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -10,6 +10,7 @@
"A login attempt using two-factor authentication failed (%1$s)" : "Bi urratseko egiaztapenaren bidezko saioa hasteko ahaleginak huts egin du (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Zure pasahitza edo e-posta helbidea aldatu da",
"Your apps" : "Zure aplikazioak",
+ "Updates" : "Eguneraketak",
"Enabled apps" : "Gaitutako aplikazioak",
"Disabled apps" : "Gaitu gabeko aplikazioak",
"App bundles" : "Aplikazio sortak",
@@ -100,6 +101,7 @@
"Error: This app can not be enabled because it makes the server unstable" : "Errorea: aplikazioa hau ezin da gaitu zerbitzaria ezegonkor izatea egiten duelako",
"Error: Could not disable broken app" : "Errorea: ezin da hondatutako aplikazioa desgaitu",
"Error while disabling broken app" : "Errorea hondatutako aplikazioa desgaitzerakoan",
+ "No app updates available" : "Ez dago app-aren eguneraketarik eskuragarri",
"Updating...." : "Eguneratzen...",
"Error while updating app" : "Errorea aplikazioa eguneratzen zen bitartean",
"Updated" : "Eguneratuta",
@@ -179,6 +181,8 @@
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"A valid email must be provided" : "Baliozko posta elektronikoa eman behar da",
"Developer documentation" : "Garatzailearen dokumentazioa",
+ "View in store" : "Dendan ikusi",
+ "Limit to groups" : "Taldeetara mugatu",
"by %s" : "by %s",
"%s-licensed" : "%s-lizentziapean",
"Documentation:" : "Dokumentazioa:",
@@ -212,6 +216,7 @@
"STARTTLS" : "STARTTLS",
"Email server" : "E-posta zerbitzaria",
"Open documentation" : "Ireki dokumentazioa",
+ "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Zerbitzaria epostak bidaltzeko gai izatea garrantzitsua da, pasahitzak berrezartzeko eta abisuentzako",
"Send mode" : "Bidaltzeko modua",
"Encryption" : "Enkriptazioa",
"From address" : "Helbidetik",
@@ -227,6 +232,7 @@
"Test email settings" : "Probatu eposta ezarpenak",
"Send email" : "Bidali eposta",
"Server-side encryption" : "Zerbitzariaren aldeko enkriptaketa",
+ "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." : "Zerbitzari-aldeko enkriptazioak zerbitzarira igotzen diren fitxategiak enkriptatzeabaimentzen du. Honek eraginkortasuna jaitsi dezake, beraz gaitu beharrezkoa bada soilik. ",
"Enable server-side encryption" : "Gaitu zerbitzariaren aldeko enkriptaketa",
"Please read carefully before activating server-side encryption: " : "Mesedez, irakurri arretaz zerbitzariaren aldeko enkriptaketa gaitu aurretik:",
"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." : "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.",
@@ -235,18 +241,42 @@
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.",
"This is the final warning: Do you really want to enable encryption?" : "This is the final warning: Do you really want to enable encryption?",
"Enable encryption" : "Gaitu enkriptatzea",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Ez da enkriptazio modulurik kargatu, mesedez enkriptazio modulu bat gaitu app-en menuan. ",
+ "Select default encryption module:" : "Defektuzko enkriptazio modulua hautatu:",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Enkriptazio gakoak enkriptazio sistema zaharretik (ownCloud <=8.0) sistema berrira migratu behar duzu. Gaitu mesedez \" Defektuzko enkriptazio modulua\" eta 'occ encryption:migrate' exekuta ezazu",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Enkriptazio gakoak sistema zaharretik (ownCloud <=8.0) berrira migratu behar duzu",
+ "Start migration" : "Migrazioa hasi",
"Security & setup warnings" : "Segurtasun eta konfigurazio abisuak",
+ "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 Tips & Tricks section and the documentation for more information." : "Zure instantzia ondo konfiguratzea garrantzitsua da segurasun eta errendimendurako. Honekin laguntzeko test automatiko batzuk garatzen ari gara. Dokumentazioaren Tips & Tricks atala ikusi informazio gehiagorako. ",
+ "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : " Sistemako ingurune aldagaiak atzitzeko PHP ez dago ondo konfiguratua. getenv(\"PATH\") testeatzean erantzun hutsa jasotzen da. ",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalazio dokumentazioa ↗</a> begiratu PHP konfigurazio oharrak eta zerbitzariaren PHP konfigurazioa ulertzeko, batez ere php-fpm erabiltzen bada",
"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." : "Bakarrik irakurtzeko konfigurazioa gaitu da. Honek web-interfazearen bidez konfigurazio batzuk aldatzea ekiditzen du. Are gehiago, fitxategia eskuz ezarri behar da idazteko moduan eguneraketa bakoitzerako.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP lerro bakarreko blokeak mozteko konfiguratua dagoela dirudi. Oinarrizko app batzuk eskuraezin bihurtuko dira.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Zure datubaseak ez du \"READ COMMITTED\" transakzio isolamendu mailarik. Honek arazoak sor dezake paraleloki ekintza asko exekutatzen badira. ",
+ "%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version." : "%1$aren %2 bertsio zaharkitua instalatua dago, egonkortasun eta errendimendu arrazoiak medio, %1 bertsiora eguneratzea gomendatzen da.",
+ "The PHP module 'fileinfo' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "'fileinfo' PHP modulua falta da. Modulu hau gaitzea bereziki gomendatzen da, MIME moten detekzioan emaitzarik hoberenak edukitzeko.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Fitxategien blokeo transakzionala desgaituta dago, eta lasterketa baldintzak gerta daitezke. config.php fitxategiko 'filelocking.enable' gaitu arazo hauek ekiditeko. <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentazioa ↗</a> kontsultatu informazio gehiagorako.",
"System locale can not be set to a one which supports UTF-8." : "Eskualdeko ezarpena ezin da UTF-8 onartzen duen batera ezarri.",
+ "This means that there might be problems with certain characters in filenames." : "Honek fitxategi izenen karaktere batzuekin arazoak egon daitezkeela esan nahi du. ",
+ "It is strongly proposed to install the required packages on your system to support one of the following locales: %s." : "Ondoko lokalizazioentzako euskarria izateko, zure sisteman beharrezko paketeak instalatzea bereziki gomendatzen da: %s.",
"All checks passed." : "Egiaztapen guztiak gaindituta.",
+ "Background jobs" : "Atzeko planoko lanak",
+ "Last job ran %s." : "Azken lana %s itzuli zuen. ",
+ "Last job execution ran %s. Something seems wrong." : "Azken lanaren exekuzioak %s itzuli zuen. Zerbait gaizki joan da ",
+ "Background job didn’t run yet!" : "Atzeko planoko lana ez da martxan jarri oraindik!",
"Execute one task with each page loaded" : "Exekutatu zeregin bat orri karga bakoitzean",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over HTTP." : "cron.php webcrom zerbitzu bezala erregistratua dago, cron.php 15 minuturo HTTP bidez deitu ahal izateko.",
+ "Use system cron service to call the cron.php file every 15 minutes." : "Sistemaren cron zerbitzua erabili cron.php 15 minuturo deitzeko.",
"The cron.php needs to be executed by the system user \"%s\"." : "Sistemako \"%s\" erabiltzaileak, cron.php exekutatu behar du.",
+ "To run this you need the PHP POSIX extension. See {linkstart}PHP documentation{linkend} for more details." : "Hau exekutatzeko PHP POSIX luzapena behar duzu. {linkstart}PHP dokumentazioa{linkend} ikusi informazio gehiagorako",
"Version" : "Bertsioa",
"Sharing" : "Partekatzea",
+ "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Admin bezala partekatze portaerak zehazki konfigura daitezke. Dokumentazioaikusi informazio gehiagorako. ",
"Allow apps to use the Share API" : "Baimendu aplikazioak partekatzeko APIa erabiltzeko",
"Allow users to share via link" : "Baimendu erabiltzaileak esteken bidez partekatzea",
"Allow public uploads" : "Baimendu igoera publikoak",
+ "Always ask for a password" : "Beti eskatu pasahitza",
"Enforce password protection" : "Betearazi pasahitzaren babesa",
"Set default expiration date" : "Ezarri muga data lehenetsia",
"Expire after " : "Iraungia honen ondoren",
@@ -265,11 +295,15 @@
"Improving the config.php" : "config.php hobetzen",
"Theming" : "Itxura",
"Hardening and security guidance" : "Gogortze eta segurtasun gida",
+ "Personal" : "Pertsonala",
+ "Administration" : "Administrazioa",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Zuk <strong>%s</strong> erabiltzen ari zara <strong>%s</strong>-tik",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "<strong>%s</strong> erabiltzen ari zara,<strong>%s</strong>-koa (<strong>%s %%</strong>)",
"Profile picture" : "Zure irudia",
"Upload new" : "Igo berria",
"Select from Files" : "Aukeratu fitxategien artean",
"Remove image" : "Irudia ezabatu",
+ "png or jpg, max. 20 MB" : "png edo jpg, gehienez 20MB",
"Picture provided by original account" : "Irudia jatorrizko kontutik hartuta",
"Cancel" : "Ezeztatu",
"Choose as profile picture" : "Aukeratu profil irudi gisa",
@@ -284,7 +318,10 @@
"Address" : "Helbidea",
"Your postal address" : "Zure helbidea",
"Website" : "Web orria",
+ "It can take up to 24 hours before the account is displayed as verified." : "24 ordu pasa daitezke kontua ziurtatua bezala agertu baino lehen",
+ "Link https://…" : "https://... esteka",
"Twitter" : "Twitter",
+ "Twitter handle @…" : "Twitter heldulekua @...",
"You are member of the following groups:" : "Zuk honako talde kide zara:",
"Language" : "Hizkuntza",
"Help translate" : "Lagundu itzultzen",
@@ -301,8 +338,15 @@
"For security reasons this password will only be shown once." : "Segurtasun arrazoiengatik, pasahitz hau behin soilik erakutsiko da.",
"Username" : "Erabiltzaile izena",
"Done" : "Egina",
+ "Follow us on Google+" : "Google+en jarrai gaitzazu",
+ "Like our Facebook page" : "Gure Facebook orrian Like egin",
+ "Follow us on Twitter" : "Jarrai gaitzazu Twitterren",
+ "Check out our blog" : "Gure bloga kontsultatu",
+ "Subscribe to our newsletter" : "Izena eman gure buletinean",
+ "Settings" : "Ezarpenak",
"Show storage location" : "Erakutsi biltegiaren kokapena",
"Show user backend" : "Bistaratu erabiltzaile motorra",
+ "Show last login" : "Azken izen ematea erakutsi",
"Show email address" : "Bistaratu eposta helbidea",
"Send email to new user" : "Bidali eposta erabiltzaile berriari",
"E-Mail" : "E-posta",
@@ -344,32 +388,46 @@
"App passwords" : "Aplikazioen pasahitzak",
"Sync clients" : "Sync clients",
"This is used for sending out notifications." : "Hau jakinarazpenak bidaltzeko erabiltzen da.",
+ "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistemaren ingurune aldagaiak atzitzeko ez dago ondo konfiguratua.getenv(\"PATH\") testak erantzun hutsa itzultzen du. ",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.",
"This means that there might be problems with certain characters in file names." : "Honek esan nahi du fitxategien izenetako karaktere batzuekin arazoak egon daitezkeela.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Biziki gomendatzen dizugu beharrezkoak diren paketea zure sisteman instalatzea honi euskarria eman ahal izateko: %s.",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Zure instalazioa ez badago domeinuaren sustraian egina eta erabiltzen badu sistemaren cron-a, arazoak izan daitezke URL sorreran. Arazo horiek saihesteko ezarri \"overwrite.cli.url\" opzioa zure config.php fitxategian zure instalazioaren webroot bidera (Proposatua: \"%s\")",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Ezin izan da cronjob CLI moduan exekutatu. Ondoko errore teknikoak agertu dira:",
"Cron" : "Cron",
"Last cron job execution: %s." : "Azken cron lan exekuzioa: %s.",
"Last cron job execution: %s. Something seems wrong." : "Azken cron lan exekuzioa: %s. Zerbait gaizki dirudi.",
"Cron was not executed yet!" : "Cron-a oraindik ez da exekutatu!",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php webcron zerbitzu batean erregistratua dago cron.php 15 minuturo http bidez deitzeko.",
"Use system's cron service to call the cron.php file every 15 minutes." : "Erabili sistemaren cron zerbitzua deitzeko cron.php fitxategia 15 minutuan behin.",
+ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Hau exekutatzeko PHPko posix luzapena behar duzu. Xehetasun gehiagorako {linkstart}PHP dokumentazioa{linkend} kontsulta ezazu ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Onartu elkarbanatze elkarrizketan, erabiltzaile osatze automatikoa. Desgaituta badago, erabiltzaile izena osoa sartu behar da.",
"Uninstall app" : "Desinstalatu aplikazioa",
"Cheers!" : "Ongi izan!",
"Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\nJakinarazi nahi dizugu, badaukazula %s kontua.\n\nZure erabiltzaile izena: %s \nSar zaitez: %s\n",
+ "For password recovery and notifications" : "Pasahitza berreskuratzeko eta abisuentzako",
"Your website" : "Zure web orria",
"Your Twitter handle" : "Zure Twitter erabiltzailea",
"Get the apps to sync your files" : "Lortu aplikazioak zure fitxategiak sinkronizatzeko",
"Desktop client" : "Mahaigaineko bezeroa",
"Android app" : "Android aplikazioa",
"iOS app" : "iOS aplikazioa",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "Proiektuan lagundu nahi baduzu {contributeopen} garatzaileekin elkartu{linkclose} edo {contributeopen}hitza zabaldu{linkclose}!",
"Show First Run Wizard again" : "Erakutsi berriz Lehenengo Aldiko Morroia",
"Passcodes that give an app or device permissions to access your account." : "Zure kontuan sartzeko aplikazio edo gailuei baimena ematen dien pasahitzak.",
"Name" : "Izena",
+ "Follow us on Google Plus!" : "Google Plusen jarrai gaitzazu",
+ "Like our facebook page!" : "Gure Facebook orrian Like egin",
+ "Subscribe to our twitter channel!" : "Izena eman gure twitter kanalean!",
+ "Subscribe to our news feed!" : "Izena eman gure berrien jariora!",
+ "Subscribe to our newsletter!" : "Izena eman gure berrietan!",
"Show last log in" : "Erakutsi azkeneko saio hasiera",
"Group name" : "Taldearen izena",
- "You have now an %s account, you can add, protect, and share your data." : "Orain baduzu %s kontu bat, zure datuak gehitu, babestu eta parteka ditzakezu."
+ "You have now an %s account, you can add, protect, and share your data." : "Orain baduzu %s kontu bat, zure datuak gehitu, babestu eta parteka ditzakezu.",
+ "Verifying" : "Konprobatzen",
+ "Follow us on Google+!" : "Jarrai gaitzazu Google+en!",
+ "Follow us on Twitter!" : "Jarrai gaitzazu Twitterren!",
+ "Check out our blog!" : "Gure blogean sartu!"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index b48b11e858f..26c547d6cd2 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"A login attempt using two-factor authentication failed (%1$s)" : "Een inlogpoging via tweefactor authenticatie is mislukt (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Je <strong>wachtwoord</strong> of <strong>e-mailadres</strong> is gewijzigd",
"Your apps" : "Jouw apps",
+ "Updates" : "Updates",
"Enabled apps" : "Ingeschakelde apps",
"Disabled apps" : "Uitgeschakelde apps",
"App bundles" : "App bundels",
@@ -103,6 +104,7 @@ OC.L10N.register(
"Error: This app can not be enabled because it makes the server unstable" : "Fout: Deze app kan niet ingeschakeld worden, omdat die de server onstabiel maakt",
"Error: Could not disable broken app" : "Fout: Kan de beschadigde app niet uitschakelen",
"Error while disabling broken app" : "Fout bij het uitschakelen van de beschadigde app",
+ "No app updates available" : "Geen app updates beschikbaar",
"Updating...." : "Bijwerken....",
"Error while updating app" : "Fout bij het bijwerken van de app",
"Updated" : "Bijgewerkt",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index cb51e755c90..7137c88f1bb 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -10,6 +10,7 @@
"A login attempt using two-factor authentication failed (%1$s)" : "Een inlogpoging via tweefactor authenticatie is mislukt (%1$s)",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Je <strong>wachtwoord</strong> of <strong>e-mailadres</strong> is gewijzigd",
"Your apps" : "Jouw apps",
+ "Updates" : "Updates",
"Enabled apps" : "Ingeschakelde apps",
"Disabled apps" : "Uitgeschakelde apps",
"App bundles" : "App bundels",
@@ -101,6 +102,7 @@
"Error: This app can not be enabled because it makes the server unstable" : "Fout: Deze app kan niet ingeschakeld worden, omdat die de server onstabiel maakt",
"Error: Could not disable broken app" : "Fout: Kan de beschadigde app niet uitschakelen",
"Error while disabling broken app" : "Fout bij het uitschakelen van de beschadigde app",
+ "No app updates available" : "Geen app updates beschikbaar",
"Updating...." : "Bijwerken....",
"Error while updating app" : "Fout bij het bijwerken van de app",
"Updated" : "Bijgewerkt",
diff --git a/tests/Core/Controller/AutoCompleteControllerTest.php b/tests/Core/Controller/AutoCompleteControllerTest.php
new file mode 100644
index 00000000000..bcd0d6e1cd3
--- /dev/null
+++ b/tests/Core/Controller/AutoCompleteControllerTest.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Tests\Core\Controller;
+
+
+use OC\Core\Controller\AutoCompleteController;
+use OCP\Collaboration\AutoComplete\IManager;
+use OCP\Collaboration\Collaborators\ISearch;
+use OCP\IConfig;
+use OCP\IRequest;
+use Test\TestCase;
+
+class AutoCompleteControllerTest extends TestCase {
+ /** @var ISearch|\PHPUnit_Framework_MockObject_MockObject */
+ protected $collaboratorSearch;
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $autoCompleteManager;
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ protected $config;
+ /** @var AutoCompleteController */
+ protected $controller;
+
+ protected function setUp() {
+ parent::setUp();
+
+ /** @var IRequest $request */
+ $request = $this->createMock(IRequest::class);
+ $this->collaboratorSearch = $this->createMock(ISearch::class);
+ $this->autoCompleteManager = $this->createMock(IManager::class);
+ $this->config = $this->createMock(IConfig::class);
+
+ $this->controller = new AutoCompleteController(
+ 'core',
+ $request,
+ $this->collaboratorSearch,
+ $this->autoCompleteManager,
+ $this->config
+ );
+ }
+
+ public function testGet() {
+ $searchResults = [
+ 'exact' => [
+ 'users' => [],
+ 'robots' => [],
+ ],
+ 'users' => [
+ ['label' => 'Alice A.', 'value' => ['shareWith' => 'alice']],
+ ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']],
+ ],
+ ];
+
+ $expected = [
+ [ 'id' => 'alice', 'label' => 'Alice A.', 'source' => 'users'],
+ [ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'],
+ ];
+
+ $this->collaboratorSearch->expects($this->once())
+ ->method('search')
+ ->willReturn([$searchResults, false]);
+
+ $response = $this->controller->get('', 'files', '42', null);
+
+ $list = $response->getData();
+ $this->assertEquals($expected, $list); // has better error output…
+ $this->assertSame($expected, $list);
+ }
+
+ public function testGetWithExactMatch() {
+ $searchResults = [
+ 'exact' => [
+ 'users' => [
+ ['label' => 'Bob Y.', 'value' => ['shareWith' => 'bob']],
+ ],
+ 'robots' => [],
+ ],
+ 'users' => [
+ ['label' => 'Robert R.', 'value' => ['shareWith' => 'bobby']],
+ ],
+ ];
+
+ $expected = [
+ [ 'id' => 'bob', 'label' => 'Bob Y.', 'source' => 'users'],
+ [ 'id' => 'bobby', 'label' => 'Robert R.', 'source' => 'users'],
+ ];
+
+ $this->collaboratorSearch->expects($this->once())
+ ->method('search')
+ ->willReturn([$searchResults, false]);
+
+ $response = $this->controller->get('bob', 'files', '42', null);
+
+ $list = $response->getData();
+ $this->assertEquals($expected, $list); // has better error output…
+ $this->assertSame($expected, $list);
+ }
+}
diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml
index 10e1d425022..3495769457d 100644
--- a/tests/acceptance/config/behat.yml
+++ b/tests/acceptance/config/behat.yml
@@ -10,6 +10,7 @@ default:
- NextcloudTestServerContext
- AppNavigationContext
+ - CommentsAppContext
- FeatureContext
- FilesAppContext
- FilesSharingAppContext
diff --git a/tests/acceptance/features/app-comments.feature b/tests/acceptance/features/app-comments.feature
new file mode 100644
index 00000000000..81fc6f89ad1
--- /dev/null
+++ b/tests/acceptance/features/app-comments.feature
@@ -0,0 +1,8 @@
+Feature: app-comments
+
+ Scenario: Writing a comment
+ Given I am logged in
+ And I open the details view for "welcome.txt"
+ And I open the "Comments" tab in the details view
+ When I create a new comment with "Hello world" as message
+ Then I see that a comment was added
diff --git a/tests/acceptance/features/bootstrap/CommentsAppContext.php b/tests/acceptance/features/bootstrap/CommentsAppContext.php
new file mode 100644
index 00000000000..64d1dc69bc4
--- /dev/null
+++ b/tests/acceptance/features/bootstrap/CommentsAppContext.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+use Behat\Behat\Context\Context;
+
+class CommentsAppContext implements Context, ActorAwareInterface {
+ use ActorAware;
+
+
+ /**
+ * @When /^I create a new comment with "([^"]*)" as message$/
+ */
+ public function iCreateANewCommentWithAsMessage($commentText) {
+ $this->actor->find(self::newCommentField(), 2)->setValue($commentText);
+ $this->actor->find(self::submitNewCommentButton(), 2)->click();
+ }
+
+ /**
+ * @Then /^I see that a comment was added$/
+ */
+ public function iSeeThatACommentWasAdded() {
+ $self = $this;
+
+ $result = Utils::waitFor(function () use ($self) {
+ return $self->isCommentAdded();
+ }, 5, 0.5);
+
+ PHPUnit_Framework_Assert::assertTrue($result);
+ }
+
+ public function isCommentAdded() {
+ try {
+ $locator = self::commentFields();
+ $comments = $this->actor->getSession()->getPage()->findAll($locator->getSelector(), $locator->getLocator());
+ PHPUnit_Framework_Assert::assertSame(1, count($comments));
+ } catch (PHPUnit_Framework_ExpectationFailedException $e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function newCommentField() {
+ return Locator::forThe()->css("div.newCommentRow .message")->descendantOf(FilesAppContext::currentSectionDetailsView())->
+ describedAs("New comment field in the details view in Files app");
+ }
+
+ public static function commentFields() {
+ return Locator::forThe()->css(".comments .comment .message")->descendantOf(FilesAppContext::currentSectionDetailsView())->
+ describedAs("Comment fields in the details view in Files app");
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function submitNewCommentButton() {
+ return Locator::forThe()->css("div.newCommentRow .submit")->descendantOf(FilesAppContext::currentSectionDetailsView())->
+ describedAs("Submit new comment button in the details view in Files app");
+ }
+}
diff --git a/tests/acceptance/run.sh b/tests/acceptance/run.sh
index 1b68f8655ae..89fdda02630 100755
--- a/tests/acceptance/run.sh
+++ b/tests/acceptance/run.sh
@@ -138,7 +138,7 @@ function prepareDocker() {
# Selenium server.
# The container exits immediately if no command is given, so a Bash session
# is created to prevent that.
- docker run --detach --name=$NEXTCLOUD_LOCAL_CONTAINER --network=container:$SELENIUM_CONTAINER --interactive --tty nextcloudci/php7.0:php7.0-7 bash
+ docker run --detach --name=$NEXTCLOUD_LOCAL_CONTAINER --network=container:$SELENIUM_CONTAINER --interactive --tty nextcloudci/php7.1:php7.1-15 bash
# Use the $TMPDIR or, if not set, fall back to /tmp.
NEXTCLOUD_LOCAL_TAR="$($MKTEMP --tmpdir="${TMPDIR:-/tmp}" --suffix=.tar nextcloud-local-XXXXXXXXXX)"
diff --git a/tests/karma.config.js b/tests/karma.config.js
index 07dc2965346..fb613857e91 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -88,6 +88,8 @@ module.exports = function(config) {
srcFiles: [
// need to enforce loading order...
'apps/comments/js/app.js',
+ 'apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js',
+ 'apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js',
'apps/comments/js/commentmodel.js',
'apps/comments/js/commentcollection.js',
'apps/comments/js/commentsummarymodel.js',
diff --git a/tests/lib/Collaboration/Collaborators/SearchResultTest.php b/tests/lib/Collaboration/Collaborators/SearchResultTest.php
new file mode 100644
index 00000000000..90ea90237a1
--- /dev/null
+++ b/tests/lib/Collaboration/Collaborators/SearchResultTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Collaboration\Collaborators;
+
+
+use OC\Collaboration\Collaborators\Search;
+use OC\Collaboration\Collaborators\SearchResult;
+use OCP\Collaboration\Collaborators\ISearch;
+use OCP\Collaboration\Collaborators\ISearchPlugin;
+use OCP\Collaboration\Collaborators\SearchResultType;
+use OCP\IContainer;
+use OCP\Share;
+use Test\TestCase;
+
+class SearchResultTest extends TestCase {
+ /** @var IContainer|\PHPUnit_Framework_MockObject_MockObject */
+ protected $container;
+ /** @var ISearch */
+ protected $search;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->container = $this->createMock(IContainer::class);
+
+ $this->search = new Search($this->container);
+ }
+
+ public function dataAddResultSet() {
+ return [
+ [[], ['exact' => []]],
+ [['users' => ['exact' => null, 'loose' => []]], ['exact' => ['users' => []], 'users' => []]],
+ [['groups' => ['exact' => null, 'loose' => ['l1']]], ['exact' => ['groups' => []], 'groups' => ['l1']]],
+ [['users' => ['exact' => ['e1'], 'loose' => []]], ['exact' => ['users' => ['e1']], 'users' => []]],
+ ];
+ }
+
+ /**
+ * @dataProvider dataAddResultSet
+ * @param array $toAdd
+ * @param array $expected
+ */
+ public function testAddResultSet(array $toAdd, array $expected) {
+ $result = new SearchResult();
+
+ foreach ($toAdd as $type => $results) {
+ $result->addResultSet(new SearchResultType($type), $results['loose'], $results['exact']);
+ }
+
+ $this->assertEquals($expected, $result->asArray());
+ }
+
+ public function dataHasResult() {
+ $result = ['value' => ['shareWith' => 'l1']];
+ return [
+ [[],'users', 'n1', false],
+ [['users' => ['exact' => null, 'loose' => [$result]]], 'users', 'l1', true],
+ [['users' => ['exact' => null, 'loose' => [$result]]], 'users', 'l2', false],
+ [['users' => ['exact' => null, 'loose' => [$result]]], 'groups', 'l1', false],
+ [['users' => ['exact' => [$result], 'loose' => []]], 'users', 'l1', true],
+ [['users' => ['exact' => [$result], 'loose' => []]], 'users', 'l2', false],
+ [['users' => ['exact' => [$result], 'loose' => []]], 'groups', 'l1', false],
+
+ ];
+ }
+
+ /**
+ * @dataProvider dataHasResult
+ * @param array $toAdd
+ * @param string $type
+ * @param string $id
+ * @param bool $expected
+ */
+ public function testHasResult(array $toAdd, $type, $id, $expected) {
+ $result = new SearchResult();
+
+ foreach ($toAdd as $addType => $results) {
+ $result->addResultSet(new SearchResultType($addType), $results['loose'], $results['exact']);
+ }
+
+ $this->assertSame($expected, $result->hasResult(new SearchResultType($type), $id));
+ }
+
+}
diff --git a/tests/lib/Comments/FakeManager.php b/tests/lib/Comments/FakeManager.php
index 840961fb901..d3dd1dfb58a 100644
--- a/tests/lib/Comments/FakeManager.php
+++ b/tests/lib/Comments/FakeManager.php
@@ -1,12 +1,14 @@
<?php
namespace Test\Comments;
+use OCP\Comments\IComment;
+use OCP\Comments\ICommentsManager;
use OCP\IUser;
/**
* Class FakeManager
*/
-class FakeManager implements \OCP\Comments\ICommentsManager {
+class FakeManager implements ICommentsManager {
public function get($id) {}
@@ -26,17 +28,17 @@ class FakeManager implements \OCP\Comments\ICommentsManager {
public function delete($id) {}
- public function save(\OCP\Comments\IComment $comment) {}
+ public function save(IComment $comment) {}
public function deleteReferencesOfActor($actorType, $actorId) {}
public function deleteCommentsAtObject($objectType, $objectId) {}
- public function setReadMark($objectType, $objectId, \DateTime $dateTime, \OCP\IUser $user) {}
+ public function setReadMark($objectType, $objectId, \DateTime $dateTime, IUser $user) {}
- public function getReadMark($objectType, $objectId, \OCP\IUser $user) {}
+ public function getReadMark($objectType, $objectId, IUser $user) {}
- public function deleteReadMarksFromUser(\OCP\IUser $user) {}
+ public function deleteReadMarksFromUser(IUser $user) {}
public function deleteReadMarksOnObject($objectType, $objectId) {}
@@ -47,4 +49,6 @@ class FakeManager implements \OCP\Comments\ICommentsManager {
public function resolveDisplayName($type, $id) {}
public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {}
+
+ public function getActorsInTree($id) {}
}
diff --git a/tests/lib/Comments/ManagerTest.php b/tests/lib/Comments/ManagerTest.php
index b04f3bd567e..671389232e2 100644
--- a/tests/lib/Comments/ManagerTest.php
+++ b/tests/lib/Comments/ManagerTest.php
@@ -3,12 +3,13 @@
namespace Test\Comments;
use OC\Comments\Comment;
-use OCP\Comments\CommentsEvent;
+use OC\Comments\ManagerFactory;
+use OCP\Comments\IComment;
use OCP\Comments\ICommentsEventHandler;
use OCP\Comments\ICommentsManager;
+use OCP\Comments\NotFoundException;
use OCP\IDBConnection;
use OCP\IUser;
-use Test\Files\Storage\DummyUser;
use Test\TestCase;
/**
@@ -62,7 +63,7 @@ class ManagerTest extends TestCase {
}
protected function getManager() {
- $factory = new \OC\Comments\ManagerFactory(\OC::$server);
+ $factory = new ManagerFactory(\OC::$server);
return $factory->getManager();
}
@@ -109,7 +110,7 @@ class ManagerTest extends TestCase {
$id = strval($qb->getLastInsertId());
$comment = $manager->get($id);
- $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertTrue($comment instanceof IComment);
$this->assertSame($comment->getId(), $id);
$this->assertSame($comment->getParentId(), '2');
$this->assertSame($comment->getTopmostParentId(), '1');
@@ -152,14 +153,14 @@ class ManagerTest extends TestCase {
// Verifying the root comment
$this->assertTrue(isset($tree['comment']));
- $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertTrue($tree['comment'] instanceof IComment);
$this->assertSame($tree['comment']->getId(), strval($headId));
$this->assertTrue(isset($tree['replies']));
$this->assertSame(count($tree['replies']), 3);
// one level deep
foreach ($tree['replies'] as $reply) {
- $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertTrue($reply['comment'] instanceof IComment);
$this->assertSame($reply['comment']->getId(), strval($id));
$this->assertSame(count($reply['replies']), 0);
$id--;
@@ -174,7 +175,7 @@ class ManagerTest extends TestCase {
// Verifying the root comment
$this->assertTrue(isset($tree['comment']));
- $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertTrue($tree['comment'] instanceof IComment);
$this->assertSame($tree['comment']->getId(), strval($id));
$this->assertTrue(isset($tree['replies']));
$this->assertSame(count($tree['replies']), 0);
@@ -200,14 +201,14 @@ class ManagerTest extends TestCase {
// Verifying the root comment
$this->assertTrue(isset($tree['comment']));
- $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertTrue($tree['comment'] instanceof IComment);
$this->assertSame($tree['comment']->getId(), strval($headId));
$this->assertTrue(isset($tree['replies']));
$this->assertSame(count($tree['replies']), 2);
// one level deep
foreach ($tree['replies'] as $reply) {
- $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment);
+ $this->assertTrue($reply['comment'] instanceof IComment);
$this->assertSame($reply['comment']->getId(), strval($idToVerify));
$this->assertSame(count($reply['replies']), 0);
$idToVerify--;
@@ -223,7 +224,7 @@ class ManagerTest extends TestCase {
$this->assertTrue(is_array($comments));
$this->assertSame(count($comments), 1);
- $this->assertTrue($comments[0] instanceof \OCP\Comments\IComment);
+ $this->assertTrue($comments[0] instanceof IComment);
$this->assertSame($comments[0]->getMessage(), 'nice one');
}
@@ -243,7 +244,7 @@ class ManagerTest extends TestCase {
$this->assertTrue(is_array($comments));
foreach ($comments as $comment) {
- $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertTrue($comment instanceof IComment);
$this->assertSame($comment->getMessage(), 'nice one');
$this->assertSame($comment->getId(), strval($idToVerify));
$idToVerify--;
@@ -282,7 +283,7 @@ class ManagerTest extends TestCase {
$this->assertTrue(is_array($comments));
foreach ($comments as $comment) {
- $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertTrue($comment instanceof IComment);
$this->assertSame($comment->getMessage(), 'nice one');
$this->assertSame($comment->getId(), strval($idToVerify));
$this->assertTrue(intval($comment->getId()) >= 4);
@@ -334,6 +335,7 @@ class ManagerTest extends TestCase {
$this->addDatabaseEntry(0, 0, null, null, $fileIds[$i]);
}
$this->addDatabaseEntry(0, 0, (new \DateTime())->modify('-2 days'), null, $fileIds[0]);
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
@@ -368,6 +370,10 @@ class ManagerTest extends TestCase {
/**
* @dataProvider invalidCreateArgsProvider
* @expectedException \InvalidArgumentException
+ * @param string $aType
+ * @param string $aId
+ * @param string $oType
+ * @param string $oId
*/
public function testCreateCommentInvalidArguments($aType, $aId, $oType, $oId) {
$manager = $this->getManager();
@@ -381,7 +387,7 @@ class ManagerTest extends TestCase {
$objectId = 'bielefeld';
$comment = $this->getManager()->create($actorType, $actorId, $objectType, $objectId);
- $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertTrue($comment instanceof IComment);
$this->assertSame($comment->getActorType(), $actorType);
$this->assertSame($comment->getActorId(), $actorId);
$this->assertSame($comment->getObjectType(), $objectType);
@@ -405,7 +411,7 @@ class ManagerTest extends TestCase {
$id = strval($this->addDatabaseEntry(0, 0));
$comment = $manager->get($id);
- $this->assertTrue($comment instanceof \OCP\Comments\IComment);
+ $this->assertTrue($comment instanceof IComment);
$done = $manager->delete($id);
$this->assertTrue($done);
$manager->get($id);
@@ -515,6 +521,8 @@ class ManagerTest extends TestCase {
/**
* @dataProvider invalidActorArgsProvider
* @expectedException \InvalidArgumentException
+ * @param string $type
+ * @param string $id
*/
public function testDeleteReferencesOfActorInvalidInput($type, $id) {
$manager = $this->getManager();
@@ -551,7 +559,7 @@ class ManagerTest extends TestCase {
public function testDeleteReferencesOfActorWithUserManagement() {
$user = \OC::$server->getUserManager()->createUser('xenia', '123456');
- $this->assertTrue($user instanceof \OCP\IUser);
+ $this->assertTrue($user instanceof IUser);
$manager = \OC::$server->getCommentsManager();
$comment = $manager->create('users', $user->getUID(), 'files', 'file64');
@@ -565,8 +573,8 @@ class ManagerTest extends TestCase {
$user->delete();
$comment = $manager->get($commentID);
- $this->assertSame($comment->getActorType(), \OCP\Comments\ICommentsManager::DELETED_USER);
- $this->assertSame($comment->getActorId(), \OCP\Comments\ICommentsManager::DELETED_USER);
+ $this->assertSame($comment->getActorType(), ICommentsManager::DELETED_USER);
+ $this->assertSame($comment->getActorId(), ICommentsManager::DELETED_USER);
}
public function invalidObjectArgsProvider() {
@@ -581,6 +589,8 @@ class ManagerTest extends TestCase {
/**
* @dataProvider invalidObjectArgsProvider
* @expectedException \InvalidArgumentException
+ * @param string $type
+ * @param string $id
*/
public function testDeleteCommentsAtObjectInvalidInput($type, $id) {
$manager = $this->getManager();
@@ -607,7 +617,7 @@ class ManagerTest extends TestCase {
foreach ($ids as $id) {
try {
$manager->get(strval($id));
- } catch (\OCP\Comments\NotFoundException $e) {
+ } catch (NotFoundException $e) {
$verified++;
}
}
@@ -620,6 +630,7 @@ class ManagerTest extends TestCase {
}
public function testSetMarkRead() {
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
@@ -636,6 +647,7 @@ class ManagerTest extends TestCase {
}
public function testSetMarkReadUpdate() {
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
@@ -655,6 +667,7 @@ class ManagerTest extends TestCase {
}
public function testReadMarkDeleteUser() {
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
@@ -672,6 +685,7 @@ class ManagerTest extends TestCase {
}
public function testReadMarkDeleteObject() {
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
diff --git a/tests/lib/DB/MigratorTest.php b/tests/lib/DB/MigratorTest.php
index e4f45c4bb86..ea718240c5e 100644
--- a/tests/lib/DB/MigratorTest.php
+++ b/tests/lib/DB/MigratorTest.php
@@ -41,6 +41,9 @@ class MigratorTest extends \Test\TestCase {
/** @var string */
private $tableName;
+ /** @var string */
+ private $tableNameTmp;
+
protected function setUp() {
parent::setUp();
@@ -50,11 +53,23 @@ class MigratorTest extends \Test\TestCase {
$this->markTestSkipped('DB migration tests are not supported on OCI');
}
$this->manager = new \OC\DB\MDB2SchemaManager($this->connection);
- $this->tableName = strtolower($this->getUniqueID($this->config->getSystemValue('dbtableprefix', 'oc_') . 'test_'));
+ $this->tableName = $this->getUniqueTableName();
+ $this->tableNameTmp = $this->getUniqueTableName();
+ }
+
+ private function getUniqueTableName() {
+ return strtolower($this->getUniqueID($this->config->getSystemValue('dbtableprefix', 'oc_') . 'test_'));
}
protected function tearDown() {
- $this->connection->exec('DROP TABLE ' . $this->tableName);
+ // Try to delete if exists (IF EXISTS NOT SUPPORTED IN ORACLE)
+ try {
+ $this->connection->exec('DROP TABLE ' . $this->connection->quoteIdentifier($this->tableNameTmp));
+ } catch (\Doctrine\DBAL\DBALException $e) {}
+
+ try {
+ $this->connection->exec('DROP TABLE ' . $this->connection->quoteIdentifier($this->tableName));
+ } catch (\Doctrine\DBAL\DBALException $e) {}
parent::tearDown();
}
@@ -200,4 +215,24 @@ class MigratorTest extends \Test\TestCase {
$this->assertTrue(true);
}
+
+ public function testAddingForeignKey() {
+ $startSchema = new Schema([], [], $this->getSchemaConfig());
+ $table = $startSchema->createTable($this->tableName);
+ $table->addColumn('id', 'integer', ['autoincrement' => true]);
+ $table->addColumn('name', 'string');
+ $table->setPrimaryKey(['id']);
+
+ $fkName = "fkc";
+ $tableFk = $startSchema->createTable($this->tableNameTmp);
+ $tableFk->addColumn('fk_id', 'integer');
+ $tableFk->addColumn('name', 'string');
+ $tableFk->addForeignKeyConstraint($this->tableName, array('fk_id'), array('id'), array(), $fkName);
+
+ $migrator = $this->manager->getMigrator();
+ $migrator->migrate($startSchema);
+
+
+ $this->assertTrue($startSchema->getTable($this->tableNameTmp)->hasForeignKey($fkName));
+ }
}
diff --git a/tests/lib/Files/Type/DetectionTest.php b/tests/lib/Files/Type/DetectionTest.php
index 295b9bf9fac..1d01a96fcc0 100644
--- a/tests/lib/Files/Type/DetectionTest.php
+++ b/tests/lib/Files/Type/DetectionTest.php
@@ -84,6 +84,8 @@ class DetectionTest extends \Test\TestCase {
$this->assertEquals('application/octet-stream', $this->detection->detectPath('..hidden'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath('foo'));
$this->assertEquals('application/octet-stream', $this->detection->detectPath(''));
+ $this->assertEquals('image/png', $this->detection->detectPath('foo.png.ocTransferId123456789.part'));
+ $this->assertEquals('image/png', $this->detection->detectPath('foo.png.v1234567890'));
}
public function testDetectString() {
diff --git a/tests/lib/LoggerTest.php b/tests/lib/LoggerTest.php
index da9cedc9f56..3a30bbd1d3b 100644
--- a/tests/lib/LoggerTest.php
+++ b/tests/lib/LoggerTest.php
@@ -138,6 +138,32 @@ class LoggerTest extends TestCase {
}
}
+ /**
+ * @dataProvider userAndPasswordData
+ */
+ public function testDetectclosure($user, $password) {
+ $a = function($user, $password) {
+ throw new \Exception('test');
+ };
+
+ try {
+ $a($user, $password);
+ } catch (\Exception $e) {
+ $this->logger->logException($e);
+ }
+ $logLines = $this->getLogs();
+
+ foreach($logLines as $logLine) {
+ $log = explode('\n', $logLine);
+ unset($log[1]); // Remove `testDetectclosure(` because we are not testing this here, but the closure on stack trace 0
+ $logLine = implode('\n', $log);
+
+ $this->assertNotContains($user, $logLine);
+ $this->assertNotContains($password, $logLine);
+ $this->assertContains('{closure}(*** sensitive parameters replaced ***)', $logLine);
+ }
+ }
+
public function dataGetLogClass() {
return [
['file', \OC\Log\File::class],