summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------3rdparty0
-rw-r--r--apps/files/ajax/newfile.php2
-rw-r--r--apps/files/controller/apicontroller.php6
-rw-r--r--apps/files/js/filelist.js10
-rw-r--r--apps/files/js/files.js2
-rw-r--r--apps/files/l10n/hu_HU.php1
-rw-r--r--apps/files/l10n/id.php37
-rw-r--r--apps/files/l10n/uk.php15
-rw-r--r--apps/files/lib/helper.php11
-rw-r--r--apps/files/tests/js/filelistSpec.js7
-rw-r--r--apps/files_encryption/l10n/el.php6
-rw-r--r--apps/files_encryption/l10n/es.php6
-rw-r--r--apps/files_encryption/l10n/et_EE.php6
-rw-r--r--apps/files_encryption/l10n/fr.php6
-rw-r--r--apps/files_encryption/l10n/id.php20
-rw-r--r--apps/files_encryption/l10n/pl.php1
-rw-r--r--apps/files_encryption/l10n/pt_PT.php6
-rw-r--r--apps/files_encryption/l10n/ru.php6
-rw-r--r--apps/files_encryption/l10n/sl.php6
-rw-r--r--apps/files_encryption/l10n/uk.php44
-rw-r--r--[-rwxr-xr-x]apps/files_encryption/lib/crypt.php7
-rw-r--r--[-rwxr-xr-x]apps/files_encryption/lib/helper.php12
-rw-r--r--[-rwxr-xr-x]apps/files_encryption/lib/keymanager.php0
-rwxr-xr-xapps/files_encryption/tests/crypt.php8
-rw-r--r--apps/files_encryption/tests/helper.php18
-rw-r--r--apps/files_encryption/tests/hooks.php8
-rw-r--r--apps/files_encryption/tests/keymanager.php8
-rw-r--r--apps/files_encryption/tests/proxy.php8
-rwxr-xr-xapps/files_encryption/tests/share.php8
-rw-r--r--apps/files_encryption/tests/stream.php8
-rwxr-xr-xapps/files_encryption/tests/trashbin.php8
-rwxr-xr-xapps/files_encryption/tests/util.php9
-rwxr-xr-xapps/files_encryption/tests/webdav.php8
-rw-r--r--apps/files_external/js/settings.js156
-rw-r--r--apps/files_external/l10n/el.php5
-rw-r--r--apps/files_external/l10n/fr.php2
-rw-r--r--apps/files_external/l10n/ja.php2
-rw-r--r--apps/files_external/l10n/pt_PT.php3
-rw-r--r--apps/files_external/l10n/uk.php49
-rw-r--r--apps/files_external/lib/amazons3.php115
-rw-r--r--[-rwxr-xr-x]apps/files_external/lib/config.php9
-rw-r--r--[-rwxr-xr-x]apps/files_external/lib/dropbox.php1
-rw-r--r--apps/files_external/lib/ftp.php2
-rw-r--r--apps/files_external/lib/google.php1
-rw-r--r--apps/files_external/lib/sftp.php39
-rw-r--r--apps/files_external/lib/swift.php130
-rw-r--r--[-rwxr-xr-x]apps/files_external/personal.php0
-rw-r--r--apps/files_sharing/ajax/list.php2
-rw-r--r--apps/files_sharing/js/public.js2
-rw-r--r--apps/files_sharing/l10n/el.php1
-rw-r--r--apps/files_sharing/l10n/et_EE.php1
-rw-r--r--apps/files_sharing/l10n/hu_HU.php1
-rw-r--r--apps/files_sharing/l10n/id.php14
-rw-r--r--apps/files_sharing/l10n/pt_PT.php1
-rw-r--r--apps/files_sharing/l10n/uk.php23
-rw-r--r--apps/files_sharing/tests/api.php22
-rw-r--r--apps/files_sharing/tests/base.php37
-rw-r--r--apps/files_trashbin/l10n/ro.php1
-rw-r--r--apps/files_trashbin/lib/trashbin.php53
-rw-r--r--apps/files_versions/l10n/ro.php5
-rw-r--r--apps/user_ldap/appinfo/update.php4
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/css/settings.css25
-rw-r--r--apps/user_ldap/group_ldap.php63
-rw-r--r--apps/user_ldap/js/experiencedAdmin.js100
-rw-r--r--apps/user_ldap/js/ldapFilter.js73
-rw-r--r--apps/user_ldap/js/settings.js348
-rw-r--r--apps/user_ldap/l10n/ar.php26
-rw-r--r--apps/user_ldap/l10n/bg_BG.php4
-rw-r--r--apps/user_ldap/l10n/cs_CZ.php4
-rw-r--r--apps/user_ldap/l10n/da.php4
-rw-r--r--apps/user_ldap/l10n/de.php4
-rw-r--r--apps/user_ldap/l10n/de_DE.php4
-rw-r--r--apps/user_ldap/l10n/el.php4
-rw-r--r--apps/user_ldap/l10n/en_GB.php4
-rw-r--r--apps/user_ldap/l10n/es.php4
-rw-r--r--apps/user_ldap/l10n/et_EE.php4
-rw-r--r--apps/user_ldap/l10n/fi_FI.php7
-rw-r--r--apps/user_ldap/l10n/fr.php4
-rw-r--r--apps/user_ldap/l10n/hu_HU.php3
-rw-r--r--apps/user_ldap/l10n/id.php66
-rw-r--r--apps/user_ldap/l10n/it.php4
-rw-r--r--apps/user_ldap/l10n/ja.php2
-rw-r--r--apps/user_ldap/l10n/ko.php3
-rw-r--r--apps/user_ldap/l10n/nl.php4
-rw-r--r--apps/user_ldap/l10n/pt_BR.php4
-rw-r--r--apps/user_ldap/l10n/pt_PT.php4
-rw-r--r--apps/user_ldap/l10n/sl.php4
-rw-r--r--apps/user_ldap/l10n/tr.php4
-rw-r--r--apps/user_ldap/l10n/uk.php71
-rw-r--r--apps/user_ldap/lib/access.php2
-rw-r--r--apps/user_ldap/lib/configuration.php179
-rw-r--r--apps/user_ldap/lib/wizard.php3
-rw-r--r--apps/user_ldap/settings.php5
-rw-r--r--apps/user_ldap/templates/part.wizard-groupfilter.php7
-rw-r--r--apps/user_ldap/templates/part.wizard-server.php10
-rw-r--r--apps/user_ldap/templates/part.wizard-userfilter.php7
-rw-r--r--apps/user_ldap/templates/part.wizardcontrols.php1
-rw-r--r--apps/user_ldap/tests/group_ldap.php33
-rw-r--r--[-rwxr-xr-x]apps/user_webdavauth/appinfo/app.php0
-rw-r--r--[-rwxr-xr-x]apps/user_webdavauth/appinfo/info.xml0
-rw-r--r--apps/user_webdavauth/l10n/uk.php1
-rw-r--r--[-rwxr-xr-x]apps/user_webdavauth/settings.php0
-rw-r--r--[-rwxr-xr-x]apps/user_webdavauth/templates/settings.php0
-rw-r--r--[-rwxr-xr-x]apps/user_webdavauth/user_webdavauth.php0
-rw-r--r--[-rwxr-xr-x]config/.htaccess0
-rw-r--r--[-rwxr-xr-x]config/config.sample.php63
-rw-r--r--core/ajax/appconfig.php15
-rw-r--r--core/avatar/controller.php1
-rw-r--r--core/command/maintenance/repair.php4
-rw-r--r--core/css/apps.css2
-rw-r--r--core/css/header.css2
-rw-r--r--core/js/avatar.js10
-rw-r--r--core/js/config.php4
-rw-r--r--core/js/js.js6
-rw-r--r--[-rwxr-xr-x]core/js/select2/select2_locale_zh-TW.js0
-rw-r--r--core/js/share.js3
-rw-r--r--[-rwxr-xr-x]core/js/snap.js0
-rw-r--r--core/l10n/bg_BG.php1
-rw-r--r--core/l10n/cs_CZ.php1
-rw-r--r--core/l10n/da.php1
-rw-r--r--core/l10n/de.php5
-rw-r--r--core/l10n/de_DE.php1
-rw-r--r--core/l10n/el.php3
-rw-r--r--core/l10n/en_GB.php1
-rw-r--r--core/l10n/es.php1
-rw-r--r--core/l10n/et_EE.php21
-rw-r--r--core/l10n/fi_FI.php2
-rw-r--r--core/l10n/fr.php1
-rw-r--r--core/l10n/hu_HU.php13
-rw-r--r--core/l10n/id.php73
-rw-r--r--core/l10n/it.php1
-rw-r--r--core/l10n/ja.php6
-rw-r--r--core/l10n/l10n-de.php7
-rw-r--r--core/l10n/l10n-en.php7
-rw-r--r--core/l10n/l10n-es.php7
-rw-r--r--core/l10n/nl.php1
-rw-r--r--core/l10n/pt_BR.php1
-rw-r--r--core/l10n/pt_PT.php5
-rw-r--r--core/l10n/sl.php3
-rw-r--r--core/l10n/tr.php1
-rw-r--r--core/l10n/uk.php60
-rw-r--r--core/setup/controller.php63
-rw-r--r--core/templates/exception.php2
-rw-r--r--core/templates/installation.php2
-rw-r--r--core/templates/layout.base.php12
-rw-r--r--core/templates/layout.guest.php12
-rw-r--r--core/templates/layout.user.php22
-rw-r--r--cron.php9
-rw-r--r--[-rwxr-xr-x]index.php0
-rw-r--r--l10n/templates/core.pot48
-rw-r--r--l10n/templates/files.pot32
-rw-r--r--l10n/templates/files_encryption.pot2
-rw-r--r--l10n/templates/files_external.pot16
-rw-r--r--l10n/templates/files_sharing.pot2
-rw-r--r--l10n/templates/files_trashbin.pot4
-rw-r--r--l10n/templates/files_versions.pot2
-rw-r--r--l10n/templates/lib.pot134
-rw-r--r--l10n/templates/private.pot130
-rw-r--r--l10n/templates/settings.pot425
-rw-r--r--l10n/templates/user_ldap.pot69
-rw-r--r--l10n/templates/user_webdavauth.pot2
-rw-r--r--lib/base.php24
-rw-r--r--lib/l10n/bg_BG.php1
-rw-r--r--lib/l10n/cs_CZ.php1
-rw-r--r--lib/l10n/da.php1
-rw-r--r--lib/l10n/de.php1
-rw-r--r--lib/l10n/de_DE.php1
-rw-r--r--lib/l10n/el.php2
-rw-r--r--lib/l10n/en_GB.php1
-rw-r--r--lib/l10n/es.php1
-rw-r--r--lib/l10n/et_EE.php2
-rw-r--r--lib/l10n/fi_FI.php1
-rw-r--r--lib/l10n/fr.php1
-rw-r--r--lib/l10n/hu_HU.php2
-rw-r--r--lib/l10n/id.php69
-rw-r--r--lib/l10n/it.php1
-rw-r--r--lib/l10n/ja.php3
-rw-r--r--lib/l10n/nl.php1
-rw-r--r--lib/l10n/pl.php2
-rw-r--r--lib/l10n/pt_BR.php1
-rw-r--r--lib/l10n/pt_PT.php1
-rw-r--r--lib/l10n/ro.php13
-rw-r--r--lib/l10n/sl.php22
-rw-r--r--lib/l10n/sv.php1
-rw-r--r--lib/l10n/tr.php1
-rw-r--r--lib/l10n/uk.php39
-rw-r--r--[-rwxr-xr-x]lib/private/activitymanager.php0
-rw-r--r--lib/private/app.php30
-rw-r--r--lib/private/appframework/db/db.php54
-rw-r--r--lib/private/appframework/dependencyinjection/dicontainer.php13
-rw-r--r--lib/private/appframework/middleware/middlewaredispatcher.php5
-rw-r--r--lib/private/appframework/middleware/sessionmiddleware.php70
-rw-r--r--lib/private/appframework/utility/simplecontainer.php13
-rw-r--r--lib/private/arrayparser.php4
-rw-r--r--lib/private/connector/sabre/directory.php18
-rw-r--r--lib/private/db.php135
-rw-r--r--lib/private/db/adapter.php2
-rw-r--r--lib/private/db/connection.php28
-rw-r--r--lib/private/db/connectionfactory.php57
-rw-r--r--lib/private/db/connectionwrapper.php99
-rw-r--r--lib/private/db/mdb2schemamanager.php20
-rw-r--r--lib/private/db/migrator.php29
-rw-r--r--lib/private/db/oraclemigrator.php14
-rw-r--r--lib/private/db/sqlitemigrator.php6
-rw-r--r--lib/private/db/statementwrapper.php3
-rw-r--r--lib/private/diagnostics/event.php89
-rw-r--r--lib/private/diagnostics/eventlogger.php41
-rw-r--r--lib/private/diagnostics/nulleventlogger.php43
-rw-r--r--lib/private/diagnostics/nullquerylogger.php31
-rw-r--r--lib/private/diagnostics/query.php57
-rw-r--r--lib/private/diagnostics/querylogger.php47
-rw-r--r--lib/private/files.php2
-rw-r--r--lib/private/files/mount/manager.php2
-rw-r--r--lib/private/files/objectstore/homeobjectstorestorage.php6
-rw-r--r--lib/private/files/objectstore/objectstorestorage.php5
-rw-r--r--lib/private/files/storage/local.php21
-rw-r--r--lib/private/files/view.php10
-rw-r--r--lib/private/group/manager.php24
-rw-r--r--lib/private/helper.php153
-rw-r--r--lib/private/l10n.php106
-rw-r--r--lib/private/legacy/updater.php19
-rw-r--r--lib/private/migrate.php2
-rw-r--r--lib/private/ocsclient.php5
-rw-r--r--lib/private/preferences.php6
-rw-r--r--[-rwxr-xr-x]lib/private/preview.php16
-rw-r--r--[-rwxr-xr-x]lib/private/previewmanager.php0
-rw-r--r--lib/private/repair.php26
-rw-r--r--[-rwxr-xr-x]lib/private/request.php2
-rw-r--r--lib/private/route/router.php5
-rw-r--r--lib/private/server.php156
-rw-r--r--lib/private/setup.php135
-rw-r--r--lib/private/share/share.php60
-rw-r--r--lib/private/tagging/tag.php89
-rw-r--r--lib/private/tagging/tagmapper.php77
-rw-r--r--lib/private/tagmanager.php24
-rw-r--r--lib/private/tags.php345
-rw-r--r--lib/private/template.php34
-rw-r--r--lib/private/template/templatefilelocator.php2
-rw-r--r--lib/private/templatelayout.php163
-rw-r--r--lib/private/tempmanager.php146
-rw-r--r--lib/private/updater.php7
-rw-r--r--lib/private/user.php9
-rw-r--r--lib/private/user/user.php14
-rw-r--r--[-rwxr-xr-x]lib/private/util.php63
-rw-r--r--lib/private/vobject.php3
-rw-r--r--lib/public/db.php7
-rw-r--r--lib/public/diagnostics/ievent.php36
-rw-r--r--lib/public/diagnostics/ieventlogger.php39
-rw-r--r--lib/public/diagnostics/iquery.php26
-rw-r--r--lib/public/diagnostics/iquerylogger.php27
-rw-r--r--lib/public/iconfig.php2
-rw-r--r--lib/public/idbconnection.php72
-rw-r--r--lib/public/iservercontainer.php23
-rw-r--r--lib/public/itagmanager.php5
-rw-r--r--lib/public/itags.php27
-rw-r--r--lib/public/itempmanager.php38
-rw-r--r--lib/repair/assetcache.php30
-rw-r--r--[-rwxr-xr-x]settings/admin.php0
-rw-r--r--settings/controller/mailsettingscontroller.php2
-rw-r--r--settings/js/users/users.js2
-rw-r--r--settings/l10n/ar.php36
-rw-r--r--settings/l10n/ast.php43
-rw-r--r--settings/l10n/az.php34
-rw-r--r--settings/l10n/bg_BG.php54
-rw-r--r--settings/l10n/bn_BD.php30
-rw-r--r--settings/l10n/bn_IN.php2
-rw-r--r--settings/l10n/ca.php44
-rw-r--r--settings/l10n/cs_CZ.php56
-rw-r--r--settings/l10n/cy_GB.php6
-rw-r--r--settings/l10n/da.php54
-rw-r--r--settings/l10n/de.php54
-rw-r--r--settings/l10n/de_AT.php3
-rw-r--r--settings/l10n/de_CH.php27
-rw-r--r--settings/l10n/de_DE.php54
-rw-r--r--settings/l10n/el.php52
-rw-r--r--settings/l10n/en_GB.php54
-rw-r--r--settings/l10n/eo.php35
-rw-r--r--settings/l10n/es.php54
-rw-r--r--settings/l10n/es_AR.php41
-rw-r--r--settings/l10n/es_CL.php1
-rw-r--r--settings/l10n/es_MX.php24
-rw-r--r--settings/l10n/et_EE.php53
-rw-r--r--settings/l10n/eu.php44
-rw-r--r--settings/l10n/fa.php38
-rw-r--r--settings/l10n/fi_FI.php55
-rw-r--r--settings/l10n/fr.php56
-rw-r--r--settings/l10n/gl.php44
-rw-r--r--settings/l10n/he.php24
-rw-r--r--settings/l10n/hi.php2
-rw-r--r--settings/l10n/hr.php43
-rw-r--r--settings/l10n/hu_HU.php44
-rw-r--r--settings/l10n/ia.php9
-rw-r--r--settings/l10n/id.php141
-rw-r--r--settings/l10n/is.php20
-rw-r--r--settings/l10n/it.php54
-rw-r--r--settings/l10n/ja.php49
-rw-r--r--settings/l10n/ka_GE.php21
-rw-r--r--settings/l10n/km.php33
-rw-r--r--settings/l10n/ko.php33
-rw-r--r--settings/l10n/ku_IQ.php5
-rw-r--r--settings/l10n/lb.php10
-rw-r--r--settings/l10n/lt_LT.php25
-rw-r--r--settings/l10n/lv.php22
-rw-r--r--settings/l10n/mk.php36
-rw-r--r--settings/l10n/ms_MY.php6
-rw-r--r--settings/l10n/nb_NO.php43
-rw-r--r--settings/l10n/nl.php54
-rw-r--r--settings/l10n/nn_NO.php21
-rw-r--r--settings/l10n/oc.php8
-rw-r--r--settings/l10n/pa.php4
-rw-r--r--settings/l10n/pl.php53
-rw-r--r--settings/l10n/pt_BR.php54
-rw-r--r--settings/l10n/pt_PT.php57
-rw-r--r--settings/l10n/ro.php35
-rw-r--r--settings/l10n/ru.php44
-rw-r--r--settings/l10n/si_LK.php11
-rw-r--r--settings/l10n/sk_SK.php44
-rw-r--r--settings/l10n/sl.php84
-rw-r--r--settings/l10n/sq.php23
-rw-r--r--settings/l10n/sr.php19
-rw-r--r--settings/l10n/sr@latin.php5
-rw-r--r--settings/l10n/sv.php48
-rw-r--r--settings/l10n/ta_LK.php14
-rw-r--r--settings/l10n/te.php1
-rw-r--r--settings/l10n/th_TH.php21
-rw-r--r--settings/l10n/tr.php54
-rw-r--r--settings/l10n/ug.php15
-rw-r--r--settings/l10n/uk.php165
-rw-r--r--settings/l10n/ur_PK.php3
-rw-r--r--settings/l10n/vi.php22
-rw-r--r--settings/l10n/zh_CN.php44
-rw-r--r--settings/l10n/zh_HK.php7
-rw-r--r--settings/l10n/zh_TW.php42
-rw-r--r--settings/personal.php35
-rw-r--r--settings/templates/personal.php26
-rw-r--r--settings/templates/users/part.userlist.php6
-rw-r--r--tests/lib/appframework/middleware/sessionmiddlewaretest.php89
-rw-r--r--tests/lib/db/mdb2schemamanager.php10
-rw-r--r--tests/lib/db/migrator.php11
-rw-r--r--tests/lib/dbschema.php14
-rw-r--r--tests/lib/files/storage/local.php67
-rw-r--r--tests/lib/files/view.php25
-rw-r--r--tests/lib/group/manager.php44
-rw-r--r--tests/lib/l10n.php60
-rw-r--r--tests/lib/setup.php103
-rw-r--r--tests/lib/share/backend.php3
-rw-r--r--tests/lib/tags.php64
-rw-r--r--tests/lib/templatelayout.php68
-rw-r--r--tests/lib/tempmanager.php143
-rw-r--r--tests/lib/user/user.php46
-rw-r--r--tests/lib/util.php6
-rw-r--r--tests/settings/controller/mailsettingscontrollertest.php6
353 files changed, 6595 insertions, 3436 deletions
diff --git a/3rdparty b/3rdparty
-Subproject 5db359cb710c51747d3fb78b605f8b8cdcd1e60
+Subproject 94179d9d70b6be43ff4251941034cd2735d10f4
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 392fc5bd1c8..b4d91514a2a 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -33,7 +33,7 @@ function progress($notification_code, $severity, $message, $message_code, $bytes
case STREAM_NOTIFY_PROGRESS:
if ($bytes_transferred > 0) {
- if (!isset($filesize)) {
+ if (!isset($filesize) || $filesize === 0) {
} else {
$progress = (int)(($bytes_transferred/$filesize)*100);
if($progress>$lastsize) { //limit the number or messages send
diff --git a/apps/files/controller/apicontroller.php b/apps/files/controller/apicontroller.php
index 01f9086c27d..89d24a5c47f 100644
--- a/apps/files/controller/apicontroller.php
+++ b/apps/files/controller/apicontroller.php
@@ -32,7 +32,7 @@ class ApiController extends Controller {
*
* @param int $x
* @param int $y
- * @param string $file
+ * @param string $file URL-encoded filename
* @return JSONResponse|DownloadResponse
*/
public function getThumbnail($x, $y, $file) {
@@ -41,9 +41,9 @@ class ApiController extends Controller {
}
try {
- $preview = new Preview('', 'files', $file, $x, $y, true);
+ $preview = new Preview('', 'files', urldecode($file), $x, $y, true);
echo($preview->showPreview('image/png'));
- return new DownloadResponse($file.'.png', 'image/png');
+ return new DownloadResponse(urldecode($file).'.png', 'image/png');
} catch (\Exception $e) {
return new JSONResponse('File not found.', Http::STATUS_NOT_FOUND);
}
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index c70c866c634..cf1d9780d99 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -49,8 +49,10 @@
fileSummary: null,
initialized: false,
- // number of files per page
- pageSize: 20,
+ // number of files per page, calculated dynamically
+ pageSize: function() {
+ return Math.ceil(this.$container.height() / 50);
+ },
/**
* Array of files in the current folder.
@@ -496,7 +498,7 @@
*/
_nextPage: function(animate) {
var index = this.$fileList.children().length,
- count = this.pageSize,
+ count = this.pageSize(),
tr,
fileData,
newTrs = [],
@@ -1189,7 +1191,7 @@
// if there are less elements visible than one page
// but there are still pending elements in the array,
// then directly append the next page
- if (lastIndex < this.files.length && lastIndex < this.pageSize) {
+ if (lastIndex < this.files.length && lastIndex < this.pageSize()) {
this._nextPage(true);
}
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 5fcf99d24af..df268fea6de 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -350,7 +350,7 @@ var createDragShadow = function(event) {
}
// do not show drag shadow for too many files
- var selectedFiles = _.first(FileList.getSelectedFiles(), FileList.pageSize);
+ var selectedFiles = _.first(FileList.getSelectedFiles(), FileList.pageSize());
selectedFiles = _.sortBy(selectedFiles, FileList._fileInfoCompare);
if (!isDragSelected && selectedFiles.length === 1) {
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 1a8d2a6f548..7aef457b4a0 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"Unknown error" => "Ismeretlen hiba",
"Could not move %s - File with this name already exists" => "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel",
"Could not move %s" => "Nem sikerült %s áthelyezése",
+"Permission denied" => "Engedély megtagadva ",
"File name cannot be empty." => "A fájlnév nem lehet semmi.",
"\"%s\" is an invalid file name." => "\"%s\" érvénytelen, mint fájlnév.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'",
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index b8b362d5b48..259025b7e88 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -1,20 +1,27 @@
<?php
$TRANSLATIONS = array(
-"Unknown error" => "Galat tidak diketahui",
+"Storage not available" => "Penyimpanan tidak tersedia",
+"Storage invalid" => "Penyimpanan tidak sah",
+"Unknown error" => "Kesalahan tidak diketahui",
"Could not move %s - File with this name already exists" => "Tidak dapat memindahkan %s - Berkas dengan nama ini sudah ada",
"Could not move %s" => "Tidak dapat memindahkan %s",
+"Permission denied" => "Perizinan ditolak",
"File name cannot be empty." => "Nama berkas tidak boleh kosong.",
+"\"%s\" is an invalid file name." => "\"%s\" adalah sebuah nama berkas yang tidak sah.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan.",
+"The target folder has been moved or deleted." => "Folder tujuan telah dipindahkan atau dihapus.",
"The name %s is already used in the folder %s. Please choose a different name." => "Nama %s sudah digunakan dalam folder %s. Silakan pilih nama yang berbeda.",
"Not a valid source" => "Sumber tidak sah",
-"Error while downloading %s to %s" => "Galat saat mengunduh %s ke %s",
-"Error when creating the file" => "Galat saat membuat berkas",
+"Server is not allowed to open URLs, please check the server configuration" => "Server tidak megizinkan untuk membuka URL, mohon periksa konfigurasi server",
+"The file exceeds your quota by %s" => "Berkas melampaui kuota Anda oleh %s",
+"Error while downloading %s to %s" => "Kesalahan saat mengunduh %s ke %s",
+"Error when creating the file" => "Kesalahan saat membuat berkas",
"Folder name cannot be empty." => "Nama folder tidak bolh kosong.",
-"Error when creating the folder" => "Galat saat membuat folder",
+"Error when creating the folder" => "Kesalahan saat membuat folder",
"Unable to set upload directory." => "Tidak dapat mengatur folder unggah",
"Invalid Token" => "Token tidak sah",
-"No file was uploaded. Unknown error" => "Tidak ada berkas yang diunggah. Galat tidak dikenal.",
-"There is no error, the file uploaded with success" => "Tidak ada galat, berkas sukses diunggah",
+"No file was uploaded. Unknown error" => "Tidak ada berkas yang diunggah. Kesalahan tidak dikenal.",
+"There is no error, the file uploaded with success" => "Tidak ada kesalahan, berkas sukses diunggah",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Berkas yang diunggah melampaui direktif upload_max_filesize pada php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Berkas yang diunggah melampaui direktif MAX_FILE_SIZE yang ditentukan dalam formulir HTML.",
"The uploaded file was only partially uploaded" => "Berkas hanya diunggah sebagian",
@@ -26,7 +33,10 @@ $TRANSLATIONS = array(
"Upload failed. Could not get file info." => "Unggah gagal. Tidak mendapatkan informasi berkas.",
"Invalid directory." => "Direktori tidak valid.",
"Files" => "Berkas",
+"All files" => "Semua berkas",
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte",
+"Total file size {size1} exceeds upload limit {size2}" => "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}",
+"Not enough free space, you are uploading {size1} but only {size2} is left" => "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa",
"Upload cancelled." => "Pengunggahan dibatalkan.",
"Could not get result from server." => "Tidak mendapatkan hasil dari server.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.",
@@ -34,16 +44,19 @@ $TRANSLATIONS = array(
"{new_name} already exists" => "{new_name} sudah ada",
"Could not create file" => "Tidak dapat membuat berkas",
"Could not create folder" => "Tidak dapat membuat folder",
+"Error fetching URL" => "Kesalahan saat mengambil URL",
"Share" => "Bagikan",
"Delete" => "Hapus",
+"Disconnect storage" => "Memutuskan penyimpaan",
"Unshare" => "Batalkan berbagi",
"Delete permanently" => "Hapus secara permanen",
"Rename" => "Ubah nama",
"Pending" => "Menunggu",
-"Error moving file" => "Galat saat memindahkan berkas",
-"Error" => "Galat",
+"Error moving file." => "Kesalahan saat memindahkan berkas.",
+"Error moving file" => "Kesalahan saat memindahkan berkas",
+"Error" => "Kesalahan ",
"Could not rename file" => "Tidak dapat mengubah nama berkas",
-"Error deleting file." => "Galat saat menghapus berkas.",
+"Error deleting file." => "Kesalahan saat menghapus berkas.",
"Name" => "Nama",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
@@ -51,13 +64,16 @@ $TRANSLATIONS = array(
"_%n file_::_%n files_" => array("%n berkas"),
"You don’t have permission to upload or create files here" => "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini",
"_Uploading %n file_::_Uploading %n files_" => array("Mengunggah %n berkas"),
+"\"{name}\" is an invalid file name." => "\"{name}\" adalah nama berkas yang tidak sah.",
"Your storage is full, files can not be updated or synced anymore!" => "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!",
"Your storage is almost full ({usedSpacePercent}%)" => "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
"{dirs} and {files}" => "{dirs} dan {files}",
+"%s could not be renamed as it has been deleted" => "%s tidak dapat diubah namanya kerena telah dihapus",
"%s could not be renamed" => "%s tidak dapat diubah nama",
+"Upload (max. %s)" => "Unggah (maks. %s)",
"File handling" => "Penanganan berkas",
"Maximum upload size" => "Ukuran pengunggahan maksimum",
"max. possible: " => "Kemungkinan maks.:",
@@ -74,6 +90,7 @@ $TRANSLATIONS = array(
"Download" => "Unduh",
"Upload too large" => "Yang diunggah terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.",
-"Files are being scanned, please wait." => "Berkas sedang dipindai, silakan tunggu."
+"Files are being scanned, please wait." => "Berkas sedang dipindai, silakan tunggu.",
+"Currently scanning" => "Pemindaian terbaru"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index dc9e4b64c14..f2927738a1e 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -1,19 +1,25 @@
<?php
$TRANSLATIONS = array(
+"Storage not available" => "Сховище не доступне",
+"Storage invalid" => "Неправильне сховище",
"Unknown error" => "Невідома помилка",
"Could not move %s - File with this name already exists" => "Не вдалося перемістити %s - Файл з таким ім'ям вже існує",
"Could not move %s" => "Не вдалося перемістити %s",
+"Permission denied" => "Доступ заборонено",
"File name cannot be empty." => " Ім'я файлу не може бути порожнім.",
"\"%s\" is an invalid file name." => "\"%s\" - це некоректне ім'я файлу.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.",
"The target folder has been moved or deleted." => "Теку призначення було переміщено або видалено.",
"The name %s is already used in the folder %s. Please choose a different name." => "Файл з ім'ям %s вже є у теці %s. Оберіть інше ім'я.",
+"Not a valid source" => "Недійсне джерело",
"Server is not allowed to open URLs, please check the server configuration" => "Серверу заборонено відкривати посилання, перевірте конфігурацію",
+"The file exceeds your quota by %s" => "Файл перевищує вашу квоту на %s",
"Error while downloading %s to %s" => "Помилка завантаження %s до %s",
"Error when creating the file" => "Помилка створення файлу",
"Folder name cannot be empty." => "Ім'я теки не може бути порожнім.",
"Error when creating the folder" => "Помилка створення теки",
"Unable to set upload directory." => "Не вдалося встановити каталог завантаження.",
+"Invalid Token" => "Невірний Маркер",
"No file was uploaded. Unknown error" => "Не завантажено жодного файлу. Невідома помилка",
"There is no error, the file uploaded with success" => "Файл успішно вивантажено без помилок.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ",
@@ -41,6 +47,7 @@ $TRANSLATIONS = array(
"Error fetching URL" => "Помилка отримання URL",
"Share" => "Поділитися",
"Delete" => "Видалити",
+"Disconnect storage" => "Від’єднати сховище",
"Unshare" => "Закрити доступ",
"Delete permanently" => "Видалити назавжди",
"Rename" => "Перейменувати",
@@ -53,8 +60,8 @@ $TRANSLATIONS = array(
"Name" => "Ім'я",
"Size" => "Розмір",
"Modified" => "Змінено",
-"_%n folder_::_%n folders_" => array("%n тека","%n тека","%n теки"),
-"_%n file_::_%n files_" => array("%n файл","%n файлів","%n файли"),
+"_%n folder_::_%n folders_" => array("%n тека ","теки : %n ","теки : %n "),
+"_%n file_::_%n files_" => array("%n файл ","файли : %n ","файли : %n "),
"You don’t have permission to upload or create files here" => "У вас недостатньо прав для завантаження або створення файлів тут",
"_Uploading %n file_::_Uploading %n files_" => array("Завантаження %n файлу","Завантаження %n файлів","Завантаження %n файлів"),
"\"{name}\" is an invalid file name." => "\"{name}\" - некоректне ім'я файлу.",
@@ -63,11 +70,13 @@ $TRANSLATIONS = array(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.",
+"{dirs} and {files}" => "{dirs} і {files}",
+"%s could not be renamed as it has been deleted" => "%s не може бути перейменований, оскільки він видалений",
"%s could not be renamed" => "%s не може бути перейменований",
"Upload (max. %s)" => "Завантаження (макс. %s)",
"File handling" => "Робота з файлами",
"Maximum upload size" => "Максимальний розмір відвантажень",
-"max. possible: " => "макс.можливе:",
+"max. possible: " => "макс. можливе:",
"Save" => "Зберегти",
"WebDAV" => "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" => "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>",
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index e4bfcb4e9ee..aa5a2f8c68a 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -8,6 +8,8 @@
namespace OCA\Files;
+use OCP\Files\FileInfo;
+
/**
* Helper class for manipulating file information
*/
@@ -58,7 +60,7 @@ class Helper
* @param \OCP\Files\FileInfo $b file
* @return int -1 if $a must come before $b, 1 otherwise
*/
- public static function compareFileNames($a, $b) {
+ public static function compareFileNames(FileInfo $a, FileInfo $b) {
$aType = $a->getType();
$bType = $b->getType();
if ($aType === 'dir' and $bType !== 'dir') {
@@ -77,7 +79,7 @@ class Helper
* @param \OCP\Files\FileInfo $b file
* @return int -1 if $a must come before $b, 1 otherwise
*/
- public static function compareTimestamp($a, $b) {
+ public static function compareTimestamp(FileInfo $a, FileInfo $b) {
$aTime = $a->getMTime();
$bTime = $b->getMTime();
return $aTime - $bTime;
@@ -90,7 +92,7 @@ class Helper
* @param \OCP\Files\FileInfo $b file
* @return int -1 if $a must come before $b, 1 otherwise
*/
- public static function compareSize($a, $b) {
+ public static function compareSize(FileInfo $a, FileInfo $b) {
$aSize = $a->getSize();
$bSize = $b->getSize();
return ($aSize < $bSize) ? -1 : 1;
@@ -102,7 +104,7 @@ class Helper
* @param \OCP\Files\FileInfo $i
* @return array formatted file info
*/
- public static function formatFileInfo($i) {
+ public static function formatFileInfo(FileInfo $i) {
$entry = array();
$entry['id'] = $i['fileid'];
@@ -147,6 +149,7 @@ class Helper
/**
* Format file info for JSON
* @param \OCP\Files\FileInfo[] $fileInfos file infos
+ * @return array
*/
public static function formatFileInfos($fileInfos) {
$files = array();
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 94b52b395e5..83cf1f428b2 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -20,7 +20,7 @@
*/
describe('OCA.Files.FileList tests', function() {
- var testFiles, alertStub, notificationStub, fileList;
+ var testFiles, alertStub, notificationStub, fileList, pageSizeStub;
var bcResizeStub;
/**
@@ -120,7 +120,7 @@ describe('OCA.Files.FileList tests', function() {
size: 250,
etag: '456'
}];
-
+ pageSizeStub = sinon.stub(OCA.Files.FileList.prototype, 'pageSize').returns(20);
fileList = new OCA.Files.FileList($('#app-content-files'));
});
afterEach(function() {
@@ -130,6 +130,7 @@ describe('OCA.Files.FileList tests', function() {
notificationStub.restore();
alertStub.restore();
bcResizeStub.restore();
+ pageSizeStub.restore();
});
describe('Getters', function() {
it('Returns the current directory', function() {
@@ -814,7 +815,7 @@ describe('OCA.Files.FileList tests', function() {
fileList.$fileList.on('fileActionsReady', handler);
fileList._nextPage();
expect(handler.calledOnce).toEqual(true);
- expect(handler.getCall(0).args[0].$files.length).toEqual(fileList.pageSize);
+ expect(handler.getCall(0).args[0].$files.length).toEqual(fileList.pageSize());
});
it('does not trigger "fileActionsReady" event after single add with silent argument', function() {
var handler = sinon.stub();
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
index e1fabbb169c..5d293e7a06f 100644
--- a/apps/files_encryption/l10n/el.php
+++ b/apps/files_encryption/l10n/el.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Άγνωστο σφάλμα",
+"Missing recovery key password" => "Λείπει το κλειδί επαναφοράς κωδικού",
+"Please repeat the recovery key password" => "Παρακαλώ επαναλάβετε το κλειδί επαναφοράς κωδικού",
+"Repeated recovery key password does not match the provided recovery key password" => "Η επανάληψη του κλειδιού επαναφοράς κωδικού δεν ταιριάζει με το δοσμένο κλειδί επαναφοράς κωδικού",
"Recovery key successfully enabled" => "Επιτυχής ενεργοποίηση κλειδιού ανάκτησης",
"Could not disable recovery key. Please check your recovery key password!" => "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλώ ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
"Recovery key successfully disabled" => "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης",
+"Please provide the old recovery password" => "Παρακαλώ παρέχετε τον παλιό κωδικό επαναφοράς",
+"Please provide a new recovery password" => "Παρακαλώ παρέχετε ένα νέο κωδικό επαναφοράς",
+"Please repeat the new recovery password" => "Παρακαλώ επαναλάβετε το νέο κωδικό επαναφοράς",
"Password successfully changed." => "Ο κωδικός αλλάχτηκε επιτυχώς.",
"Could not change the password. Maybe the old password was not correct." => "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.",
"Private key password successfully updated." => "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
index 164db17f4a7..d26aa449b3b 100644
--- a/apps/files_encryption/l10n/es.php
+++ b/apps/files_encryption/l10n/es.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Error desconocido",
+"Missing recovery key password" => "Falta contraseña de recuperacion.",
+"Please repeat the recovery key password" => "Por favor repita la contraseña de recuperacion",
+"Repeated recovery key password does not match the provided recovery key password" => "la contraseña de recuperacion repetida no es igual a la contraseña de recuperacion",
"Recovery key successfully enabled" => "Se ha habilitado la recuperación de archivos",
"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
+"Please provide the old recovery password" => "Por favor ingrese su antigua contraseña de recuperacion",
+"Please provide a new recovery password" => "Por favor ingrese una nueva contraseña de recuperacion",
+"Please repeat the new recovery password" => "Por favor repita su nueva contraseña de recuperacion",
"Password successfully changed." => "Su contraseña ha sido cambiada",
"Could not change the password. Maybe the old password was not correct." => "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
"Private key password successfully updated." => "Contraseña de clave privada actualizada con éxito.",
diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php
index 0d786b6ce7d..7362c61bc71 100644
--- a/apps/files_encryption/l10n/et_EE.php
+++ b/apps/files_encryption/l10n/et_EE.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Tundmatu viga",
+"Missing recovery key password" => "Muuda taastevõtme parool",
+"Please repeat the recovery key password" => "Palun korda uut taastevõtme parooli",
+"Repeated recovery key password does not match the provided recovery key password" => "Lahtritesse sisestatud taastevõtme paroolid ei kattu",
"Recovery key successfully enabled" => "Taastevõtme lubamine õnnestus",
"Could not disable recovery key. Please check your recovery key password!" => "Ei suuda keelata taastevõtit. Palun kontrolli oma taastevõtme parooli!",
"Recovery key successfully disabled" => "Taastevõtme keelamine õnnestus",
+"Please provide the old recovery password" => "Palun sisesta vana taastevõtme parool",
+"Please provide a new recovery password" => "Palun sisesta uus taastevõtme parool",
+"Please repeat the new recovery password" => "Palun korda uut taastevõtme parooli",
"Password successfully changed." => "Parool edukalt vahetatud.",
"Could not change the password. Maybe the old password was not correct." => "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
"Private key password successfully updated." => "Privaatse võtme parool edukalt uuendatud.",
diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php
index 44919fbc0a3..2ca5eec48f0 100644
--- a/apps/files_encryption/l10n/fr.php
+++ b/apps/files_encryption/l10n/fr.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Erreur Inconnue ",
+"Missing recovery key password" => "Mot de passe de la clef de récupération manquant",
+"Please repeat the recovery key password" => "Répétez le mot de passe de la clé de récupération",
+"Repeated recovery key password does not match the provided recovery key password" => "Le mot de passe de la clé de récupération et sa répétition ne sont pas identiques.",
"Recovery key successfully enabled" => "Clé de récupération activée avec succès",
"Could not disable recovery key. Please check your recovery key password!" => "Impossible de désactiver la clé de récupération. Veuillez vérifier votre mot de passe de clé de récupération !",
"Recovery key successfully disabled" => "Clé de récupération désactivée avec succès",
+"Please provide the old recovery password" => "Veuillez entrer l'ancien mot de passe de récupération",
+"Please provide a new recovery password" => "Veuillez entrer un nouveau mot de passe de récupération",
+"Please repeat the new recovery password" => "Veuillez répéter le nouveau mot de passe de récupération",
"Password successfully changed." => "Mot de passe changé avec succès ",
"Could not change the password. Maybe the old password was not correct." => "Ne peut pas changer le mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Private key password successfully updated." => "Mot de passe de la clé privé mis à jour avec succès.",
diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php
index c31c3e52089..c1d171d1fc0 100644
--- a/apps/files_encryption/l10n/id.php
+++ b/apps/files_encryption/l10n/id.php
@@ -1,19 +1,31 @@
<?php
$TRANSLATIONS = array(
-"Unknown error" => "Galat tidak diketahui",
+"Unknown error" => "Kesalahan tidak diketahui",
+"Missing recovery key password" => "Sandi kunci pemuliahan hilang",
+"Please repeat the recovery key password" => "Silakan ulangi sandi kunci pemulihan",
+"Repeated recovery key password does not match the provided recovery key password" => "Sandi kunci pemulihan yang diulangi tidak cocok dengan sandi kunci pemulihan yang diberikan",
"Recovery key successfully enabled" => "Kunci pemulihan berhasil diaktifkan",
"Could not disable recovery key. Please check your recovery key password!" => "Tidak dapat menonaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!",
"Recovery key successfully disabled" => "Kunci pemulihan berhasil dinonaktifkan",
+"Please provide the old recovery password" => "Mohon berikan sandi pemulihan lama",
+"Please provide a new recovery password" => "Mohon berikan sandi pemulihan baru",
+"Please repeat the new recovery password" => "Silakan ulangi sandi pemulihan baru",
"Password successfully changed." => "Sandi berhasil diubah",
"Could not change the password. Maybe the old password was not correct." => "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.",
"Private key password successfully updated." => "Sandi kunci privat berhasil diperbarui.",
"Could not update the private key password. Maybe the old password was not correct." => "Tidak dapat memperbarui sandi kunci privat. Kemungkinan sandi lama yang Anda masukkan salah.",
"File recovery settings updated" => "Pengaturan pemulihan berkas diperbarui",
"Could not update file recovery" => "Tidak dapat memperbarui pemulihan berkas",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Aplikasi enkripsi tidak dimulai! Kemungkinan aplikasi enkripsi telah diaktifkan ulang saat sesi Anda. Silakan coba untuk keluar dan kembali lagi untuk memulai aplikasi enkripsi.",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Kunci private Anda tidak sah! Nampaknya sandi Anda telah diubah diluar %s (misal direktori perusahaan Anda). Anda dapat memperbarui sandi kunci private untuk memulihakan akses ke berkas terenkripsi Anda.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
-"Missing requirements." => "Persyaratan yang hilang.",
+"Unknown error. Please check your system settings or contact your administrator" => "Kesalahan tidak diketahui. Silakan periksa pengaturan sistem Anda atau hubungi administrator",
+"Missing requirements." => "Persyaratan tidak terpenuhi.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Pastikan bahwa PHP 5.3.3 atau yang lebih baru telah diinstal dan OpenSSL bersama ekstensi PHP telah diaktifkan dan dikonfigurasi dengan benar. Untuk saat ini, aplikasi enkripsi akan dinonaktifkan.",
"Following users are not set up for encryption:" => "Pengguna berikut belum diatur untuk enkripsi:",
-"Initial encryption started... This can take some time. Please wait." => "Inisial enskripsi dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
+"Initial encryption started... This can take some time. Please wait." => "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.",
+"Initial encryption running... Please try again later." => "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.",
+"Go directly to your %spersonal settings%s." => "Langsung ke %spengaturan pribadi%s Anda.",
"Encryption" => "Enkripsi",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
"Enable recovery key (allow to recover users files in case of password loss):" => "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):",
@@ -26,6 +38,8 @@ $TRANSLATIONS = array(
"New Recovery key password" => "Sandi kunci Pemulihan Baru",
"Repeat New Recovery key password" => "Ulangi sandi kunci Pemulihan baru",
"Change Password" => "Ubah sandi",
+"Your private key password no longer matches your log-in password." => "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.",
+"Set your old private key password to your current log-in password:" => "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:",
" If you don't remember your old password you can ask your administrator to recover your files." => "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.",
"Old log-in password" => "Sandi masuk yang lama",
"Current log-in password" => "Sandi masuk saat ini",
diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php
index b7a66462ef2..c52c3ddee99 100644
--- a/apps/files_encryption/l10n/pl.php
+++ b/apps/files_encryption/l10n/pl.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Nieznany błąd",
+"Please repeat the recovery key password" => "Proszę powtórz nowe hasło klucza odzyskiwania",
"Recovery key successfully enabled" => "Klucz odzyskiwania włączony",
"Could not disable recovery key. Please check your recovery key password!" => "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
"Recovery key successfully disabled" => "Klucz odzyskiwania wyłączony",
diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php
index aede53f6414..e52165492d9 100644
--- a/apps/files_encryption/l10n/pt_PT.php
+++ b/apps/files_encryption/l10n/pt_PT.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Erro Desconhecido",
+"Missing recovery key password" => "Palavra-passe de recuperação em falta",
+"Please repeat the recovery key password" => "Repita a palavra-passe de recuperação",
+"Repeated recovery key password does not match the provided recovery key password" => "A palavra-passe de recuperação repetida não corresponde à palavra-passe fornecida",
"Recovery key successfully enabled" => "A chave de recuperação foi ativada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" => "Não foi possível desativar a chave de recuperação. Por favor, verifique a senha da chave de recuperação.",
"Recovery key successfully disabled" => "A chave de recuperação foi desativada com sucesso",
+"Please provide the old recovery password" => "Escreva a palavra-passe de recuperação antiga",
+"Please provide a new recovery password" => "Escreva a nova palavra-passe de recuperação",
+"Please repeat the new recovery password" => "Escreva de novo a nova palavra-passe de recuperação",
"Password successfully changed." => "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." => "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.",
"Private key password successfully updated." => "A senha da chave privada foi atualizada com sucesso. ",
diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php
index 16c0f05cc71..0a4e2cbbc27 100644
--- a/apps/files_encryption/l10n/ru.php
+++ b/apps/files_encryption/l10n/ru.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Неизвестная ошибка",
+"Missing recovery key password" => "Отсутствует пароль восстановления ключа",
+"Please repeat the recovery key password" => "Пожалуйста, повторите пароль восстановления ключа",
+"Repeated recovery key password does not match the provided recovery key password" => "Пароль восстановления ключа и его повтор не совпадают",
"Recovery key successfully enabled" => "Ключ восстановления успешно установлен",
"Could not disable recovery key. Please check your recovery key password!" => "Невозможно выключить ключ восстановления. Проверьте правильность пароля от ключа!",
"Recovery key successfully disabled" => "Ключ восстановления успешно отключен",
+"Please provide the old recovery password" => "Пожалуйста, введите старый пароль для восстановления",
+"Please provide a new recovery password" => "Пожалуйста, введите новый пароль для восстановления",
+"Please repeat the new recovery password" => "Пожалуйста, повторите новый пароль для восстановления",
"Password successfully changed." => "Пароль изменен удачно.",
"Could not change the password. Maybe the old password was not correct." => "Невозможно изменить пароль. Возможно старый пароль не был верен.",
"Private key password successfully updated." => "Пароль секретного ключа успешно обновлён.",
diff --git a/apps/files_encryption/l10n/sl.php b/apps/files_encryption/l10n/sl.php
index 7c0f438fe4e..83fef18ea0a 100644
--- a/apps/files_encryption/l10n/sl.php
+++ b/apps/files_encryption/l10n/sl.php
@@ -1,9 +1,15 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Neznana napaka",
+"Missing recovery key password" => "Manjka ključ za obnovitev",
+"Please repeat the recovery key password" => "Ponovite vpis ključa za obnovitev",
+"Repeated recovery key password does not match the provided recovery key password" => "Ponovljen vpis ključa za obnovitev ni enak prvemu vpisu tega ključa",
"Recovery key successfully enabled" => "Ključ za obnovitev gesla je uspešno nastavljen",
"Could not disable recovery key. Please check your recovery key password!" => "Ključa za obnovitev gesla ni mogoče onemogočiti. Preverite ključ!",
"Recovery key successfully disabled" => "Ključ za obnovitev gesla je uspešno onemogočen",
+"Please provide the old recovery password" => "Vpišite star ključ za obnovitev",
+"Please provide a new recovery password" => "Vpišite nov ključ za obnovitev",
+"Please repeat the new recovery password" => "Ponovno vpišite nov ključ za obnovitev",
"Password successfully changed." => "Geslo je uspešno spremenjeno.",
"Could not change the password. Maybe the old password was not correct." => "Gesla ni mogoče spremeniti. Morda vnos starega gesla ni pravilen.",
"Private key password successfully updated." => "Zasebni ključ za geslo je uspešno posodobljen.",
diff --git a/apps/files_encryption/l10n/uk.php b/apps/files_encryption/l10n/uk.php
index a2f67ebec75..674d5445bb7 100644
--- a/apps/files_encryption/l10n/uk.php
+++ b/apps/files_encryption/l10n/uk.php
@@ -1,8 +1,50 @@
<?php
$TRANSLATIONS = array(
"Unknown error" => "Невідома помилка",
+"Missing recovery key password" => "Відсутній пароль ключа відновлення",
+"Please repeat the recovery key password" => "Введіть ще раз пароль для ключа відновлення",
+"Repeated recovery key password does not match the provided recovery key password" => "Введені паролі ключа відновлення не співпадають",
+"Recovery key successfully enabled" => "Ключ відновлення підключено",
+"Could not disable recovery key. Please check your recovery key password!" => "Не вдалося відключити ключ відновлення. Будь ласка, перевірте пароль ключа відновлення!",
+"Recovery key successfully disabled" => "Ключ відновлення відключено",
+"Please provide the old recovery password" => "Будь ласка, введіть старий пароль відновлення",
+"Please provide a new recovery password" => "Будь ласка, введіть новий пароль відновлення",
+"Please repeat the new recovery password" => "Будь ласка, введіть новий пароль відновлення ще раз",
+"Password successfully changed." => "Пароль змінено.",
+"Could not change the password. Maybe the old password was not correct." => "Не вдалося змінити пароль. Можливо ви неправильно ввели старий пароль.",
+"Private key password successfully updated." => "Пароль секретного ключа оновлено.",
+"Could not update the private key password. Maybe the old password was not correct." => "Не вдалося оновити пароль секретного ключа. Можливо ви не правильно ввели старий пароль.",
+"File recovery settings updated" => "Налаштування файла відновлення оновлено",
+"Could not update file recovery" => "Не вдалося оновити файл відновлення ",
+"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Додаток шифрувння не ініціалізовано! Можливо цей додаток редагувався під час вашої сесії. Будь ласка, спробуйте вийти і зайти знову щоб проініціалізувати додаток шифрування.",
+"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ваш секретний ключ не дійсний! Ймовірно ваш пароль був змінений ззовні %s (наприклад, корпоративний каталог). Ви можете оновити секретний ключ в особистих налаштуваннях на сторінці відновлення доступу до зашифрованих файлів.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
+"Unknown error. Please check your system settings or contact your administrator" => "Невідома помилка. Будь ласка, перевірте налаштування системи або зверніться до адміністратора.",
+"Missing requirements." => "Відсутні вимоги.",
+"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Будь ласка, впевніться, що встановлена версія PHP 5.3.3 або новіша, а також, що OpenSSL та інші розширення PHP підключені та вірно налаштовані. На даний момент додаток шифрування відключений.",
+"Following users are not set up for encryption:" => "Для наступних користувачів шифрування не налаштоване:",
+"Initial encryption started... This can take some time. Please wait." => "Початкове шифрування почалося... Це може зайняти деякий час. Будь ласка, почекайте.",
+"Initial encryption running... Please try again later." => "Початкове шифрування працює... Це може зайняти деякий час. Будь ласка, почекайте.",
+"Go directly to your %spersonal settings%s." => "Перейти навпростець до ваших %spersonal settings%s.",
"Encryption" => "Шифрування",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
-"Change Password" => "Змінити Пароль"
+"Enable recovery key (allow to recover users files in case of password loss):" => "Ввімкнути ключ відновлення (дозволяє користувачам відновлювати файли при втраті паролю):",
+"Recovery key password" => "Пароль ключа відновлення",
+"Repeat Recovery key password" => "Введіть ще раз пароль ключа відновлення",
+"Enabled" => "Увімкнено",
+"Disabled" => "Вимкнено",
+"Change recovery key password:" => "Змінити пароль ключа відновлення:",
+"Old Recovery key password" => "Старий пароль ключа відновлення",
+"New Recovery key password" => "Новий пароль ключа відновлення",
+"Repeat New Recovery key password" => "Введіть ще раз новий пароль ключа відновлення",
+"Change Password" => "Змінити Пароль",
+"Your private key password no longer matches your log-in password." => "Пароль вашого закритого ключа більше не відповідає паролю від вашого облікового запису.",
+"Set your old private key password to your current log-in password:" => "Замініть старий пароль від закритого ключа на новий пароль входу:",
+" If you don't remember your old password you can ask your administrator to recover your files." => "Якщо ви не пам'ятаєте ваш старий пароль, ви можете звернутися до адміністратора щоб його відновити.",
+"Old log-in password" => "Старий пароль входу",
+"Current log-in password" => "Поточний пароль входу",
+"Update Private Key Password" => "Оновити пароль для закритого ключа",
+"Enable password recovery:" => "Ввімкнути відновлення паролю:",
+"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Включення цієї опції дозволить вам отримати доступ до своїх зашифрованих файлів у випадку втрати паролю"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index c4fc29db03a..59b191097af 100755..100644
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -24,6 +24,7 @@
*/
namespace OCA\Encryption;
+use OCA\Encryption\Exceptions\EncryptionException;
/**
* Class for common cryptography functionality
@@ -289,9 +290,9 @@ class Crypt {
$padded = self::addPadding($catfile);
return $padded;
- } catch (OCA\Encryption\Exceptions\EncryptionException $e) {
- $message = 'Could not encrypt file content (code: ' . $e->getCode . '): ';
- \OCP\Util::writeLog('files_encryption', $message . $e->getMessage, \OCP\Util::ERROR);
+ } catch (EncryptionException $e) {
+ $message = 'Could not encrypt file content (code: ' . $e->getCode() . '): ';
+ \OCP\Util::writeLog('files_encryption', $message . $e->getMessage(), \OCP\Util::ERROR);
return false;
}
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index ab19938d633..53c380ab2b3 100755..100644
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -89,7 +89,7 @@ class Helper {
* @param string $password
* @return bool
*/
- public static function setupUser($util, $password) {
+ public static function setupUser(Util $util, $password) {
// Check files_encryption infrastructure is ready for action
if (!$util->ready()) {
@@ -333,7 +333,7 @@ class Helper {
* @param string $path
* @param \OC\Files\View $view
*/
- public static function mkdirr($path, $view) {
+ public static function mkdirr($path, \OC\Files\View $view) {
$dirname = \OC\Files\Filesystem::normalizePath(dirname($path));
$dirParts = explode('/', $dirname);
$dir = "";
@@ -348,8 +348,10 @@ class Helper {
/**
* redirect to a error page
* @param Session $session
+ * @param int|null $errorCode
+ * @throws \Exception
*/
- public static function redirectToErrorPage($session, $errorCode = null) {
+ public static function redirectToErrorPage(Session $session, $errorCode = null) {
if ($errorCode === null) {
$init = $session->getInitialized();
@@ -439,7 +441,7 @@ class Helper {
* @param \OC\Files\View $rootView root view, relative to data/
* @return array list of share key files, path relative to data/$user
*/
- public static function findShareKeys($filePath, $shareKeyPath, $rootView) {
+ public static function findShareKeys($filePath, $shareKeyPath, \OC\Files\View $rootView) {
$result = array();
$user = \OCP\User::getUser();
@@ -461,7 +463,7 @@ class Helper {
} else {
\OC_Log::write(
'Encryption library',
- 'No share key found for user "' . $user . '" for file "' . $pathOld . '"',
+ 'No share key found for user "' . $user . '" for file "' . $fileName . '"',
\OC_Log::WARN
);
}
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 9560126ef33..9560126ef33 100755..100644
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php
index 1bebb3cd36c..a89754d4a14 100755
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
@@ -102,6 +102,14 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase {
public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
/**
diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php
index b94fdeb4d6c..df7ff8cdb11 100644
--- a/apps/files_encryption/tests/helper.php
+++ b/apps/files_encryption/tests/helper.php
@@ -20,18 +20,27 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
const TEST_ENCRYPTION_HELPER_USER1 = "test-helper-user1";
const TEST_ENCRYPTION_HELPER_USER2 = "test-helper-user2";
- public static function setUpBeforeClass() {
+ public function setUp() {
// create test user
\Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2, true);
\Test_Encryption_Util::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1, true);
}
- public static function tearDownAfterClass() {
+ public function tearDown() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
\OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2);
+ }
+
+ public static function tearDownAfterClass() {
+
\OC_Hook::clear();
\OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
/**
@@ -157,11 +166,6 @@ class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
$result
);
}
-
- // clean up
- $rootView->unlink($baseDir);
- \Test_Encryption_Util::logoutHelper();
- \OC_User::deleteUser($userName);
}
}
diff --git a/apps/files_encryption/tests/hooks.php b/apps/files_encryption/tests/hooks.php
index 14d44fe5bb3..c7353deee22 100644
--- a/apps/files_encryption/tests/hooks.php
+++ b/apps/files_encryption/tests/hooks.php
@@ -117,6 +117,14 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
function testDisableHook() {
diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php
index e8a9d7dda53..ad7d2cfcd45 100644
--- a/apps/files_encryption/tests/keymanager.php
+++ b/apps/files_encryption/tests/keymanager.php
@@ -98,6 +98,14 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
if (self::$stateFilesTrashbin) {
OC_App::enable('files_trashbin');
}
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
/**
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
index 42637a52e04..56d6cd2f736 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -89,6 +89,14 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
/**
diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php
index 1cd7cfc738b..f4ce94b7ee9 100755
--- a/apps/files_encryption/tests/share.php
+++ b/apps/files_encryption/tests/share.php
@@ -124,6 +124,14 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
\OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
\OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
\OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php
index 254c5e87ed1..b8c18fbe049 100644
--- a/apps/files_encryption/tests/stream.php
+++ b/apps/files_encryption/tests/stream.php
@@ -96,6 +96,14 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
function testStreamOptions() {
diff --git a/apps/files_encryption/tests/trashbin.php b/apps/files_encryption/tests/trashbin.php
index ae0974431be..5890292cd7b 100755
--- a/apps/files_encryption/tests/trashbin.php
+++ b/apps/files_encryption/tests/trashbin.php
@@ -110,6 +110,14 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
/**
diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php
index 811530546e8..d5bfb86a2e4 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -124,9 +124,18 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
\OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
\OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER2);
\OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER);
+
//cleanup groups
\OC_Group::deleteGroup(self::TEST_ENCRYPTION_UTIL_GROUP1);
\OC_Group::deleteGroup(self::TEST_ENCRYPTION_UTIL_GROUP2);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
public static function setupHooks() {
diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php
index c46d3bf0899..cc0cff9aa5c 100755
--- a/apps/files_encryption/tests/webdav.php
+++ b/apps/files_encryption/tests/webdav.php
@@ -108,6 +108,14 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
+
+ \OC_Hook::clear();
+ \OC_FileProxy::clearProxies();
+
+ // Delete keys in /data/
+ $view = new \OC\Files\View('/');
+ $view->rmdir('public-keys');
+ $view->rmdir('owncloud_private_key');
}
/**
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 00d2a920cbf..75d45ae1924 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -19,28 +19,28 @@ function getSelection($row) {
return values;
}
-function highlightBorder(element, highlight) {
- $(element).toggleClass('warning-input', highlight);
+function highlightBorder($element, highlight) {
+ $element.toggleClass('warning-input', highlight);
return highlight;
}
-function highlightInput(input) {
- if ($(input).attr('type') === 'text' || $(input).attr('type') === 'password') {
- return highlightBorder(input,
- ($(input).val() === '' && !$(input).hasClass('optional')));
+function highlightInput($input) {
+ if ($input.attr('type') === 'text' || $input.attr('type') === 'password') {
+ return highlightBorder($input,
+ ($input.val() === '' && !$input.hasClass('optional')));
}
}
OC.MountConfig={
- saveStorage:function(tr, callback) {
- var mountPoint = $(tr).find('.mountPoint input').val();
- var oldMountPoint = $(tr).find('.mountPoint input').data('mountpoint');
+ saveStorage:function($tr, callback) {
+ var mountPoint = $tr.find('.mountPoint input').val();
+ var oldMountPoint = $tr.find('.mountPoint input').data('mountpoint');
if (mountPoint === '') {
return false;
}
- var statusSpan = $(tr).closest('tr').find('.status span');
- var backendClass = $(tr).find('.backend').data('class');
- var configuration = $(tr).find('.configuration input');
+ var statusSpan = $tr.find('.status span');
+ var backendClass = $tr.find('.backend').data('class');
+ var configuration = $tr.find('.configuration input');
var addMountPoint = true;
if (configuration.length < 1) {
return false;
@@ -62,14 +62,14 @@ OC.MountConfig={
}
});
if ($('#externalStorage').data('admin') === true) {
- var multiselect = getSelection($(tr));
+ var multiselect = getSelection($tr);
}
if (addMountPoint) {
var status = false;
if ($('#externalStorage').data('admin') === true) {
var isPersonal = false;
- var oldGroups = $(tr).find('.applicable').data('applicable-groups');
- var oldUsers = $(tr).find('.applicable').data('applicable-users');
+ var oldGroups = $tr.find('.applicable').data('applicable-groups');
+ var oldUsers = $tr.find('.applicable').data('applicable-users');
var groups = [];
var users = [];
$.each(multiselect, function(index, value) {
@@ -102,7 +102,7 @@ OC.MountConfig={
oldMountPoint: oldMountPoint
},
success: function(result) {
- $(tr).find('.mountPoint input').data('mountpoint', mountPoint);
+ $tr.find('.mountPoint input').data('mountpoint', mountPoint);
status = updateStatus(statusSpan, result);
if (callback) {
callback(status);
@@ -116,8 +116,8 @@ OC.MountConfig={
}
});
});
- $(tr).find('.applicable').data('applicable-groups', groups);
- $(tr).find('.applicable').data('applicable-users', users);
+ $tr.find('.applicable').data('applicable-groups', groups);
+ $tr.find('.applicable').data('applicable-users', users);
var mountType = 'group';
$.each(oldGroups, function(index, applicable) {
$.ajax({type: 'POST',
@@ -163,7 +163,7 @@ OC.MountConfig={
oldMountPoint: oldMountPoint
},
success: function(result) {
- $(tr).find('.mountPoint input').data('mountpoint', mountPoint);
+ $tr.find('.mountPoint input').data('mountpoint', mountPoint);
status = updateStatus(statusSpan, result);
if (callback) {
callback(status);
@@ -183,20 +183,23 @@ OC.MountConfig={
};
$(document).ready(function() {
+ var $externalStorage = $('#externalStorage');
+
//initialize hidden input field with list of users and groups
- $('#externalStorage').find('tr:not(#addMountPoint)').each(function(i,tr) {
- var applicable = $(tr).find('.applicable');
- if (applicable.length > 0) {
- var groups = applicable.data('applicable-groups');
+ $externalStorage.find('tr:not(#addMountPoint)').each(function(i,tr) {
+ var $tr = $(tr);
+ var $applicable = $tr.find('.applicable');
+ if ($applicable.length > 0) {
+ var groups = $applicable.data('applicable-groups');
var groupsId = [];
$.each(groups, function () {
- groupsId.push(this+"(group)");
+ groupsId.push(this + '(group)');
});
- var users = applicable.data('applicable-users');
+ var users = $applicable.data('applicable-users');
if (users.indexOf('all') > -1) {
- $(tr).find('.applicableUsers').val('');
+ $tr.find('.applicableUsers').val('');
} else {
- $(tr).find('.applicableUsers').val(groupsId.concat(users).join(','));
+ $tr.find('.applicableUsers').val(groupsId.concat(users).join(','));
}
}
});
@@ -221,7 +224,7 @@ $(document).ready(function() {
};
},
results: function (data, page) {
- if (data.status === "success") {
+ if (data.status === 'success') {
var results = [];
var userCount = 0; // users is an object
@@ -256,10 +259,10 @@ $(document).ready(function() {
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(users),
- dataType: "json"
+ dataType: 'json'
}).done(function(data) {
var results = [];
- if (data.status === "success") {
+ if (data.status === 'success') {
$.each(data.users, function(user, displayname) {
if (displayname !== false) {
results.push({name:user, displayname:displayname, type:'user'});
@@ -294,9 +297,9 @@ $(document).ready(function() {
}
},
escapeMarkup: function (m) { return m; } // we escape the markup in formatResult and formatSelection
- }).on("select2-loaded", function() {
- $.each($(".avatardiv"), function(i, div) {
- $div = $(div);
+ }).on('select2-loaded', function() {
+ $.each($('.avatardiv'), function(i, div) {
+ var $div = $(div);
if ($div.data('type') === 'user') {
$div.avatar($div.data('name'),32);
}
@@ -306,21 +309,21 @@ $(document).ready(function() {
}
addSelect2($('tr:not(#addMountPoint) .applicableUsers'));
- $('#externalStorage').on('change', '#selectBackend', function() {
- var tr = $(this).closest("tr");
- $('#externalStorage tbody').append($(tr).clone());
- $('#externalStorage tbody tr').last().find('.mountPoint input').val('');
+ $externalStorage.on('change', '#selectBackend', function() {
+ var $tr = $(this).closest('tr');
+ $externalStorage.find('tbody').append($tr.clone());
+ $externalStorage.find('tbody tr').last().find('.mountPoint input').val('');
var selected = $(this).find('option:selected').text();
var backendClass = $(this).val();
- $(tr).find('.backend').text(selected);
- if ($(tr).find('.mountPoint input').val() === '') {
- $(tr).find('.mountPoint input').val(suggestMountPoint(selected));
+ $tr.find('.backend').text(selected);
+ if ($tr.find('.mountPoint input').val() === '') {
+ $tr.find('.mountPoint input').val(suggestMountPoint(selected));
}
- $(tr).addClass(backendClass);
- $(tr).find('.status').append('<span></span>');
- $(tr).find('.backend').data('class', backendClass);
+ $tr.addClass(backendClass);
+ $tr.find('.status').append('<span></span>');
+ $tr.find('.backend').data('class', backendClass);
var configurations = $(this).data('configurations');
- var td = $(tr).find('td.configuration');
+ var $td = $tr.find('td.configuration');
$.each(configurations, function(backend, parameters) {
if (backend === backendClass) {
$.each(parameters['configuration'], function(parameter, placeholder) {
@@ -342,20 +345,20 @@ $(document).ready(function() {
newElement = $('<input type="text" class="added' + class_string + '" data-parameter="'+parameter+'" placeholder="'+placeholder+'" />');
}
highlightInput(newElement);
- td.append(newElement);
+ $td.append(newElement);
});
- if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length === 1) {
+ if (parameters['custom'] && $externalStorage.find('tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length === 1) {
OC.addScript('files_external', parameters['custom']);
}
- td.children().not('[type=hidden]').first().focus();
+ $td.children().not('[type=hidden]').first().focus();
return false;
}
});
- $(tr).find('td').last().attr('class', 'remove');
- $(tr).find('td').last().removeAttr('style');
- $(tr).removeAttr('id');
+ $tr.find('td').last().attr('class', 'remove');
+ $tr.find('td').last().removeAttr('style');
+ $tr.removeAttr('id');
$(this).remove();
- addSelect2($('tr:not(#addMountPoint) .applicableUsers'));
+ addSelect2($tr.find('.applicableUsers'));
});
function suggestMountPoint(defaultMountPoint) {
@@ -369,7 +372,7 @@ $(document).ready(function() {
var match = true;
while (match && i < 20) {
match = false;
- $('#externalStorage tbody td.mountPoint input').each(function(index, mountPoint) {
+ $externalStorage.find('tbody td.mountPoint input').each(function(index, mountPoint) {
if ($(mountPoint).val() === defaultMountPoint+append) {
match = true;
return false;
@@ -385,54 +388,54 @@ $(document).ready(function() {
return defaultMountPoint+append;
}
- $('#externalStorage').on('paste', 'td input', function() {
- var tr = $(this).closest("tr");
- var me = this;
+ $externalStorage.on('paste', 'td input', function() {
+ var $me = $(this);
+ var $tr = $me.closest('tr');
setTimeout(function() {
- highlightInput($(me));
- OC.MountConfig.saveStorage(tr);
+ highlightInput($me);
+ OC.MountConfig.saveStorage($tr);
}, 20);
});
var timer;
- $('#externalStorage').on('keyup', 'td input', function() {
+ $externalStorage.on('keyup', 'td input', function() {
clearTimeout(timer);
- var tr = $(this).closest("tr");
+ var $tr = $(this).closest('tr');
highlightInput($(this));
if ($(this).val) {
timer = setTimeout(function() {
- OC.MountConfig.saveStorage(tr);
+ OC.MountConfig.saveStorage($tr);
}, 2000);
}
});
- $('#externalStorage').on('change', 'td input:checkbox', function() {
- OC.MountConfig.saveStorage($(this).closest("tr"));
+ $externalStorage.on('change', 'td input:checkbox', function() {
+ OC.MountConfig.saveStorage($(this).closest('tr'));
});
- $('#externalStorage').on('change', '.applicable', function() {
- OC.MountConfig.saveStorage($(this).closest("tr"));
+ $externalStorage.on('change', '.applicable', function() {
+ OC.MountConfig.saveStorage($(this).closest('tr'));
});
- $('#externalStorage').on('click', '.status>span', function() {
- OC.MountConfig.saveStorage($(this).closest("tr"));
+ $externalStorage.on('click', '.status>span', function() {
+ OC.MountConfig.saveStorage($(this).closest('tr'));
});
$('#sslCertificate').on('click', 'td.remove>img', function() {
- var $tr = $(this).closest("tr");
+ var $tr = $(this).closest('tr');
$.post(OC.filePath('files_external', 'ajax', 'removeRootCertificate.php'), {cert: $tr.attr('id')});
$tr.remove();
return true;
});
- $('#externalStorage').on('click', 'td.remove>img', function() {
- var tr = $(this).closest('tr');
- var mountPoint = $(tr).find('.mountPoint input').val();
+ $externalStorage.on('click', 'td.remove>img', function() {
+ var $tr = $(this).closest('tr');
+ var mountPoint = $tr.find('.mountPoint input').val();
- if ($('#externalStorage').data('admin') === true) {
+ if ($externalStorage.data('admin') === true) {
var isPersonal = false;
- var multiselect = getSelection($(tr));
+ var multiselect = getSelection($tr);
$.each(multiselect, function(index, value) {
var pos = value.indexOf('(group)');
if (pos != -1) {
@@ -450,10 +453,11 @@ $(document).ready(function() {
var isPersonal = true;
$.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
}
- $(tr).remove();
+ $tr.remove();
});
- $('#allowUserMounting').bind('change', function() {
+ var $allowUserMounting = $('#allowUserMounting');
+ $allowUserMounting.bind('change', function() {
OC.msg.startSaving('#userMountingMsg');
if (this.checked) {
OC.AppConfig.setValue('files_external', 'allow_user_mounting', 'yes');
@@ -475,8 +479,8 @@ $(document).ready(function() {
// disable allowUserMounting
if(userMountingBackends.length === 0) {
- $('#allowUserMounting').prop('checked', false);
- $('#allowUserMounting').trigger('change');
+ $allowUserMounting.prop('checked', false);
+ $allowUserMounting.trigger('change');
}
});
diff --git a/apps/files_external/l10n/el.php b/apps/files_external/l10n/el.php
index a4ad04b34f8..626b2d07a49 100644
--- a/apps/files_external/l10n/el.php
+++ b/apps/files_external/l10n/el.php
@@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"Amazon S3 and compliant" => "Amazon S3 και συμμορφούμενα",
"Access Key" => "Κλειδί πρόσβασης",
"Secret Key" => "Μυστικό κλειδί",
+"Hostname" => "Όνομα Υπολογιστή",
"Port" => "Θύρα",
"Region" => "Περιοχή",
"Enable SSL" => "Ενεργοποίηση SSL",
@@ -35,18 +36,20 @@ $TRANSLATIONS = array(
"Password (required for OpenStack Object Storage)" => "Μυστικός κωδικός (απαιτείται για την αποθήκευση αντικειμένων OpenStack)",
"Service Name (required for OpenStack Object Storage)" => "Όνομα υπηρεσίας (απαιτείται για την αποθήκευση αντικειμένων OpenStack)",
"URL of identity endpoint (required for OpenStack Object Storage)" => "Διεύθυνση URL της ταυτότητας τελικού σημείου (απαιτείται για την αποθήκευση αντικειμένων OpenStack)",
+"Timeout of HTTP requests in seconds" => "Χρονικό όριο των αιτήσεων HTTP σε δευτερόλεπτα",
"Share" => "Διαμοιράστε",
"SMB / CIFS using OC login" => "SMB / CIFS χρησιμοποιώντας λογαριασμό OC",
"Username as share" => "Όνομα χρήστη ως διαμοιραζόμενος φάκελος",
"URL" => "URL",
"Secure https://" => "Ασφαλής σύνδεση https://",
"Remote subfolder" => "Απομακρυσμένος υποφάκελος",
-"Access granted" => "Προσβαση παρασχέθηκε",
+"Access granted" => "Πρόσβαση παρασχέθηκε",
"Error configuring Dropbox storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ",
"Grant access" => "Παροχή πρόσβασης",
"Error configuring Google Drive storage" => "Σφάλμα ρυθμίζωντας αποθήκευση Google Drive ",
"Personal" => "Προσωπικά",
"System" => "Σύστημα",
+"All users. Type to select user or group." => "Όλοι οι χρήστες. Πληκτρολογήστε για να επιλέξετε χρήστη ή ομάδα.",
"(group)" => "(ομάδα)",
"Saved" => "Αποθηκεύτηκαν",
"<b>Note:</b> " => "<b>Σημείωση:</b> ",
diff --git a/apps/files_external/l10n/fr.php b/apps/files_external/l10n/fr.php
index 405bc4f680c..67f2f321bfb 100644
--- a/apps/files_external/l10n/fr.php
+++ b/apps/files_external/l10n/fr.php
@@ -1,6 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." => "La récupération des jetons d’authentification a échoué. Veuillez vérifier votre clef Dropbox ainsi que le mot de passe.",
+"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." => "La récupération des jetons d’authentification a échoué. Veuillez vérifier votre clé d'application Dropbox ainsi que le mot de passe.",
"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." => "La requête d’accès aux jetons d’authentification a échoué. Veuillez vérifier votre App-Key Dropbox ainsi que le mot de passe.",
"Please provide a valid Dropbox app key and secret." => "Veuillez fournir une clé d'application (app key) ainsi qu'un mot de passe valides.",
"Step 1 failed. Exception: %s" => "L’étape 1 a échoué. Erreur: %s",
diff --git a/apps/files_external/l10n/ja.php b/apps/files_external/l10n/ja.php
index 494708e63dd..f4601bb7daf 100644
--- a/apps/files_external/l10n/ja.php
+++ b/apps/files_external/l10n/ja.php
@@ -49,7 +49,7 @@ $TRANSLATIONS = array(
"Error configuring Google Drive storage" => "Googleドライブストレージの設定エラー",
"Personal" => "個人",
"System" => "システム",
-"All users. Type to select user or group." => "全てのユーザー.ユーザー、グループを追加",
+"All users. Type to select user or group." => "すべてのユーザー.ユーザー、グループを追加",
"(group)" => "(グループ)",
"Saved" => "保存されました",
"<b>Note:</b> " => "<b>注意:</b> ",
diff --git a/apps/files_external/l10n/pt_PT.php b/apps/files_external/l10n/pt_PT.php
index 9a12aebae45..185b5ef6cee 100644
--- a/apps/files_external/l10n/pt_PT.php
+++ b/apps/files_external/l10n/pt_PT.php
@@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"Amazon S3 and compliant" => "Amazon S3 e compatível",
"Access Key" => "Chave de acesso",
"Secret Key" => "Chave Secreta",
+"Hostname" => "Hostname",
"Port" => "Porta",
"Region" => "Região",
"Enable SSL" => "Activar SSL",
@@ -35,6 +36,7 @@ $TRANSLATIONS = array(
"Password (required for OpenStack Object Storage)" => "Senha (necessária para OpenStack Object Storage)",
"Service Name (required for OpenStack Object Storage)" => "Nome do Serviço (necessário para OpenStack Object Storage)",
"URL of identity endpoint (required for OpenStack Object Storage)" => "Nome do Serviço (necessário para OpenStack Object Storage)",
+"Timeout of HTTP requests in seconds" => "Timeout de pedidos HTTP em segundos",
"Share" => "Partilhar",
"SMB / CIFS using OC login" => "SMB / CIFS utilizando o início de sessão OC",
"Username as share" => "Utilizar nome de utilizador como partilha",
@@ -47,6 +49,7 @@ $TRANSLATIONS = array(
"Error configuring Google Drive storage" => "Erro ao configurar o armazenamento do Google Drive",
"Personal" => "Pessoal",
"System" => "Sistema",
+"All users. Type to select user or group." => "Todos os utilizadores. Digite para seleccionar utilizador ou grupo.",
"(group)" => "(grupo)",
"Saved" => "Guardado",
"<b>Note:</b> " => "<b>Aviso:</b> ",
diff --git a/apps/files_external/l10n/uk.php b/apps/files_external/l10n/uk.php
index 0674d3f6175..2c0c3081a5f 100644
--- a/apps/files_external/l10n/uk.php
+++ b/apps/files_external/l10n/uk.php
@@ -1,26 +1,73 @@
<?php
$TRANSLATIONS = array(
+"Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." => "Помилка при отримані токенів. Перевірте правильність вашого секретного ключа та ключ додатка.",
+"Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." => "Помилка при отримані токена доступу. Перевірте правильність вашого секретного ключа та ключ додатка.",
"Please provide a valid Dropbox app key and secret." => "Будь ласка, надайте дійсний ключ та пароль Dropbox.",
+"Step 1 failed. Exception: %s" => "1-й крок невдалий. Виключення: %s",
+"Step 2 failed. Exception: %s" => "2-й крок невдалий. Виключення: %s",
"External storage" => "Зовнішнє сховище",
+"Local" => "Локально",
"Location" => "Місце",
+"Amazon S3" => "Amazon S3",
+"Key" => "Ключ",
+"Secret" => "Секрет",
+"Bucket" => "Кошик",
+"Amazon S3 and compliant" => "Amazon S3 та сумісний",
+"Access Key" => "Ключ доступа",
+"Secret Key" => "Секретний ключ",
+"Hostname" => "Ім'я хоста",
"Port" => "Порт",
"Region" => "Регіон",
+"Enable SSL" => "Включити SSL",
+"Enable Path Style" => "Включити стиль шляху",
+"App key" => "Ключ додатку",
+"App secret" => "Секретний ключ додатку",
"Host" => "Хост",
"Username" => "Ім'я користувача",
"Password" => "Пароль",
+"Root" => "Батьківський каталог",
+"Secure ftps://" => "Захищений ftps://",
+"Client ID" => "Ідентифікатор клієнта",
+"Client secret" => "Ключ клієнта",
+"OpenStack Object Storage" => "OpenStack Object Storage",
+"Region (optional for OpenStack Object Storage)" => "Регіон (опціонально для OpenStack Object Storage)",
+"API Key (required for Rackspace Cloud Files)" => "Ключ API (обов'язково для Rackspace Cloud Files)",
+"Tenantname (required for OpenStack Object Storage)" => "Ім'я орендатора (обов'язково для OpenStack Object Storage)",
+"Password (required for OpenStack Object Storage)" => "Пароль (обов’язково для OpenStack Object Storage)",
+"Service Name (required for OpenStack Object Storage)" => "Назва сервісу (обов’язково для OpenStack Object Storage)",
+"URL of identity endpoint (required for OpenStack Object Storage)" => "URL підтвердження кінцевої точки (обов'язково для OpenStack Object Storage)",
+"Timeout of HTTP requests in seconds" => "Тайм-аут HTTP запитів на секунду",
"Share" => "Поділитися",
+"SMB / CIFS using OC login" => "SMB / CIFS з використанням логіна OC",
+"Username as share" => "Ім'я для відкритого доступу",
"URL" => "URL",
+"Secure https://" => "Захищений https://",
+"Remote subfolder" => "Віддалений підкаталог",
"Access granted" => "Доступ дозволено",
"Error configuring Dropbox storage" => "Помилка при налаштуванні сховища Dropbox",
"Grant access" => "Дозволити доступ",
"Error configuring Google Drive storage" => "Помилка при налаштуванні сховища Google Drive",
"Personal" => "Особисте",
+"System" => "Система",
+"All users. Type to select user or group." => "Всі користувачі. Введіть ім'я користувача або групи.",
+"(group)" => "(група)",
+"Saved" => "Збереженно",
+"<b>Note:</b> " => "<b>Примітка:</b>",
+" and " => "та",
+"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
+"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "<b>Примітка:</b> Підтримку FTP в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
+"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." => "<b>Примітка:</b> \"%s\" не встановлено. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.",
+"You don't have any external storages" => "У вас немає зовнішніх сховищ",
"Name" => "Ім'я",
+"Storage type" => "Тип сховища",
+"Scope" => "Область",
"External Storage" => "Зовнішні сховища",
"Folder name" => "Ім'я теки",
"Configuration" => "Налаштування",
+"Available for" => "Доступний для",
"Add storage" => "Додати сховище",
"Delete" => "Видалити",
-"Enable User External Storage" => "Активувати користувацькі зовнішні сховища"
+"Enable User External Storage" => "Активувати користувацькі зовнішні сховища",
+"Allow users to mount the following external storage" => "Дозволити користувачам монтувати наступні зовнішні сховища"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index 808de16c8a8..1869f1b15c2 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -46,6 +46,10 @@ class AmazonS3 extends \OC\Files\Storage\Common {
*/
private static $tmpFiles = array();
/**
+ * @var array
+ */
+ private $params;
+ /**
* @var bool
*/
private $test = false;
@@ -101,7 +105,6 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$this->updateLegacyId($params);
$this->bucket = $params['bucket'];
- $scheme = ($params['use_ssl'] === 'false') ? 'http' : 'https';
$this->test = isset($params['test']);
$this->timeout = (!isset($params['timeout'])) ? 15 : $params['timeout'];
$this->rescanDelay = (!isset($params['rescanDelay'])) ? 10 : $params['rescanDelay'];
@@ -110,35 +113,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
if (!isset($params['port']) || $params['port'] === '') {
$params['port'] = ($params['use_ssl'] === 'false') ? 80 : 443;
}
- $base_url = $scheme . '://' . $params['hostname'] . ':' . $params['port'] . '/';
-
- $this->connection = S3Client::factory(array(
- 'key' => $params['key'],
- 'secret' => $params['secret'],
- 'base_url' => $base_url,
- 'region' => $params['region']
- ));
-
- if (!$this->connection->isValidBucketName($this->bucket)) {
- throw new \Exception("The configured bucket name is invalid.");
- }
-
- if (!$this->connection->doesBucketExist($this->bucket)) {
- try {
- $this->connection->createBucket(array(
- 'Bucket' => $this->bucket
- ));
- $this->connection->waitUntilBucketExists(array(
- 'Bucket' => $this->bucket,
- 'waiter.interval' => 1,
- 'waiter.max_attempts' => 15
- ));
- $this->testTimeout();
- } catch (S3Exception $e) {
- \OCP\Util::logException('files_external', $e);
- throw new \Exception('Creation of bucket failed. '.$e->getMessage());
- }
- }
+ $this->params = $params;
}
/**
@@ -181,9 +156,10 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
try {
- $this->connection->putObject(array(
+ $this->getConnection()->putObject(array(
'Bucket' => $this->bucket,
'Key' => $path . '/',
+ 'Body' => '',
'ContentType' => 'httpd/unix-directory'
));
$this->testTimeout();
@@ -216,7 +192,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
protected function clearBucket() {
try {
- $this->connection->clearBucket($this->bucket);
+ $this->getConnection()->clearBucket($this->bucket);
return true;
// clearBucket() is not working with Ceph, so if it fails we try the slower approach
} catch (\Exception $e) {
@@ -237,9 +213,9 @@ class AmazonS3 extends \OC\Files\Storage\Common {
// to delete all objects prefixed with the path.
do {
// instead of the iterator, manually loop over the list ...
- $objects = $this->connection->listObjects($params);
+ $objects = $this->getConnection()->listObjects($params);
// ... so we can delete the files in batches
- $this->connection->deleteObjects(array(
+ $this->getConnection()->deleteObjects(array(
'Bucket' => $this->bucket,
'Objects' => $objects['Contents']
));
@@ -264,7 +240,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
try {
$files = array();
- $result = $this->connection->getIterator('ListObjects', array(
+ $result = $this->getConnection()->getIterator('ListObjects', array(
'Bucket' => $this->bucket,
'Delimiter' => '/',
'Prefix' => $path
@@ -299,7 +275,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$stat['size'] = -1; //unknown
$stat['mtime'] = time() - $this->rescanDelay * 1000;
} else {
- $result = $this->connection->headObject(array(
+ $result = $this->getConnection()->headObject(array(
'Bucket' => $this->bucket,
'Key' => $path
));
@@ -328,10 +304,10 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
try {
- if ($this->connection->doesObjectExist($this->bucket, $path)) {
+ if ($this->getConnection()->doesObjectExist($this->bucket, $path)) {
return 'file';
}
- if ($this->connection->doesObjectExist($this->bucket, $path.'/')) {
+ if ($this->getConnection()->doesObjectExist($this->bucket, $path.'/')) {
return 'dir';
}
} catch (S3Exception $e) {
@@ -350,7 +326,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
try {
- $this->connection->deleteObject(array(
+ $this->getConnection()->deleteObject(array(
'Bucket' => $this->bucket,
'Key' => $path
));
@@ -373,7 +349,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
self::$tmpFiles[$tmpFile] = $path;
try {
- $this->connection->getObject(array(
+ $this->getConnection()->getObject(array(
'Bucket' => $this->bucket,
'Key' => $path,
'SaveAs' => $tmpFile
@@ -421,7 +397,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return 'httpd/unix-directory';
} else if ($this->file_exists($path)) {
try {
- $result = $this->connection->headObject(array(
+ $result = $this->getConnection()->headObject(array(
'Bucket' => $this->bucket,
'Key' => $path
));
@@ -449,7 +425,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
if ($fileType === 'dir' && ! $this->isRoot($path)) {
$path .= '/';
}
- $this->connection->copyObject(array(
+ $this->getConnection()->copyObject(array(
'Bucket' => $this->bucket,
'Key' => $this->cleanKey($path),
'Metadata' => $metadata,
@@ -457,11 +433,13 @@ class AmazonS3 extends \OC\Files\Storage\Common {
));
$this->testTimeout();
} else {
- $this->connection->putObject(array(
+ $mimeType = \OC_Helper::getMimetypeDetector()->detectPath($path);
+ $this->getConnection()->putObject(array(
'Bucket' => $this->bucket,
'Key' => $this->cleanKey($path),
'Metadata' => $metadata,
- 'Body' => ''
+ 'Body' => '',
+ 'ContentType' => $mimeType
));
$this->testTimeout();
}
@@ -479,7 +457,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
if ($this->is_file($path1)) {
try {
- $this->connection->copyObject(array(
+ $this->getConnection()->copyObject(array(
'Bucket' => $this->bucket,
'Key' => $this->cleanKey($path2),
'CopySource' => S3Client::encodeKey($this->bucket . '/' . $path1)
@@ -493,7 +471,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$this->remove($path2);
try {
- $this->connection->copyObject(array(
+ $this->getConnection()->copyObject(array(
'Bucket' => $this->bucket,
'Key' => $path2 . '/',
'CopySource' => S3Client::encodeKey($this->bucket . '/' . $path1 . '/')
@@ -551,7 +529,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
public function test() {
- $test = $this->connection->getBucketAcl(array(
+ $test = $this->getConnection()->getBucketAcl(array(
'Bucket' => $this->bucket,
));
if (isset($test) && !is_null($test->getPath('Owner/ID'))) {
@@ -564,7 +542,48 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return $this->id;
}
+ /**
+ * Returns the connection
+ *
+ * @return S3Client connected client
+ * @throws \Exception if connection could not be made
+ */
public function getConnection() {
+ if (!is_null($this->connection)) {
+ return $this->connection;
+ }
+
+ $scheme = ($this->params['use_ssl'] === 'false') ? 'http' : 'https';
+ $base_url = $scheme . '://' . $this->params['hostname'] . ':' . $this->params['port'] . '/';
+
+ $this->connection = S3Client::factory(array(
+ 'key' => $this->params['key'],
+ 'secret' => $this->params['secret'],
+ 'base_url' => $base_url,
+ 'region' => $this->params['region']
+ ));
+
+ if (!$this->connection->isValidBucketName($this->bucket)) {
+ throw new \Exception("The configured bucket name is invalid.");
+ }
+
+ if (!$this->connection->doesBucketExist($this->bucket)) {
+ try {
+ $this->connection->createBucket(array(
+ 'Bucket' => $this->bucket
+ ));
+ $this->connection->waitUntilBucketExists(array(
+ 'Bucket' => $this->bucket,
+ 'waiter.interval' => 1,
+ 'waiter.max_attempts' => 15
+ ));
+ $this->testTimeout();
+ } catch (S3Exception $e) {
+ \OCP\Util::logException('files_external', $e);
+ throw new \Exception('Creation of bucket failed. '.$e->getMessage());
+ }
+ }
+
return $this->connection;
}
@@ -574,7 +593,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
try {
- $this->connection->putObject(array(
+ $this->getConnection()->putObject(array(
'Bucket' => $this->bucket,
'Key' => $this->cleanKey(self::$tmpFiles[$tmpFile]),
'SourceFile' => $tmpFile,
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 92bb891ca21..fa44e446d96 100755..100644
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -716,10 +716,11 @@ class OC_Mount_Config {
}
}
- if (count($dependencyGroup) > 0) {
+ $dependencyGroupCount = count($dependencyGroup);
+ if ($dependencyGroupCount > 0) {
$backends = '';
- for ($i = 0; $i < count($dependencyGroup); $i++) {
- if ($i > 0 && $i === count($dependencyGroup) - 1) {
+ for ($i = 0; $i < $dependencyGroupCount; $i++) {
+ if ($i > 0 && $i === $dependencyGroupCount - 1) {
$backends .= $l->t(' and ');
} elseif ($i > 0) {
$backends .= ', ';
@@ -739,7 +740,7 @@ class OC_Mount_Config {
* @param string $backend
* @return string
*/
- private static function getSingleDependencyMessage($l, $module, $backend) {
+ private static function getSingleDependencyMessage(OC_L10N $l, $module, $backend) {
switch (strtolower($module)) {
case 'curl':
return $l->t('<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend);
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
index 9f297d22dcb..cc1e628f851 100755..100644
--- a/apps/files_external/lib/dropbox.php
+++ b/apps/files_external/lib/dropbox.php
@@ -44,6 +44,7 @@ class Dropbox extends \OC\Files\Storage\Common {
$this->id = 'dropbox::'.$params['app_key'] . $params['token']. '/' . $this->root;
$oauth = new \Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
$oauth->setToken($params['token'], $params['token_secret']);
+ // note: Dropbox_API connection is lazy
$this->dropbox = new \Dropbox_API($oauth, 'auto');
} else {
throw new \Exception('Creating \OC\Files\Storage\Dropbox storage failed');
diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php
index 2650a94f85e..4a995d21157 100644
--- a/apps/files_external/lib/ftp.php
+++ b/apps/files_external/lib/ftp.php
@@ -39,7 +39,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
$this->root .= '/';
}
} else {
- throw new \Exception();
+ throw new \Exception('Creating \OC\Files\Storage\FTP storage failed');
}
}
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index 5d238a363de..62b0f182e98 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -52,6 +52,7 @@ class Google extends \OC\Files\Storage\Common {
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setUseObjects(true);
$client->setAccessToken($params['token']);
+ // note: API connection is lazy
$this->service = new \Google_DriveService($client);
$token = json_decode($params['token'], true);
$this->id = 'google::'.substr($params['client_id'], 0, 30).$token['created'];
diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php
index aec56d088d5..f0a6f145422 100644
--- a/apps/files_external/lib/sftp.php
+++ b/apps/files_external/lib/sftp.php
@@ -53,6 +53,18 @@ class SFTP extends \OC\Files\Storage\Common {
if (substr($this->root, -1, 1) != '/') {
$this->root .= '/';
}
+ }
+
+ /**
+ * Returns the connection.
+ *
+ * @return \Net_SFTP connected client instance
+ * @throws \Exception when the connection failed
+ */
+ public function getConnection() {
+ if (!is_null($this->client)) {
+ return $this->client;
+ }
$hostKeys = $this->readHostKeys();
$this->client = new \Net_SFTP($this->host);
@@ -71,6 +83,7 @@ class SFTP extends \OC\Files\Storage\Common {
if (!$this->client->login($this->user, $this->password)) {
throw new \Exception('Login failed');
}
+ return $this->client;
}
public function test() {
@@ -81,7 +94,7 @@ class SFTP extends \OC\Files\Storage\Common {
) {
return false;
}
- return $this->client->nlist() !== false;
+ return $this->getConnection()->nlist() !== false;
}
public function getId(){
@@ -149,7 +162,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function mkdir($path) {
try {
- return $this->client->mkdir($this->absPath($path));
+ return $this->getConnection()->mkdir($this->absPath($path));
} catch (\Exception $e) {
return false;
}
@@ -157,7 +170,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function rmdir($path) {
try {
- return $this->client->delete($this->absPath($path), true);
+ return $this->getConnection()->delete($this->absPath($path), true);
} catch (\Exception $e) {
return false;
}
@@ -165,7 +178,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function opendir($path) {
try {
- $list = $this->client->nlist($this->absPath($path));
+ $list = $this->getConnection()->nlist($this->absPath($path));
if ($list === false) {
return false;
}
@@ -186,7 +199,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function filetype($path) {
try {
- $stat = $this->client->stat($this->absPath($path));
+ $stat = $this->getConnection()->stat($this->absPath($path));
if ($stat['type'] == NET_SFTP_TYPE_REGULAR) {
return 'file';
}
@@ -202,7 +215,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function file_exists($path) {
try {
- return $this->client->stat($this->absPath($path)) !== false;
+ return $this->getConnection()->stat($this->absPath($path)) !== false;
} catch (\Exception $e) {
return false;
}
@@ -210,7 +223,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function unlink($path) {
try {
- return $this->client->delete($this->absPath($path), true);
+ return $this->getConnection()->delete($this->absPath($path), true);
} catch (\Exception $e) {
return false;
}
@@ -237,7 +250,7 @@ class SFTP extends \OC\Files\Storage\Common {
case 'x+':
case 'c':
case 'c+':
- $context = stream_context_create(array('sftp' => array('session' => $this->client)));
+ $context = stream_context_create(array('sftp' => array('session' => $this->getConnection())));
return fopen($this->constructUrl($path), $mode, false, $context);
}
} catch (\Exception $e) {
@@ -251,7 +264,7 @@ class SFTP extends \OC\Files\Storage\Common {
return false;
}
if (!$this->file_exists($path)) {
- $this->client->put($this->absPath($path), '');
+ $this->getConnection()->put($this->absPath($path), '');
} else {
return false;
}
@@ -262,11 +275,11 @@ class SFTP extends \OC\Files\Storage\Common {
}
public function getFile($path, $target) {
- $this->client->get($path, $target);
+ $this->getConnection()->get($path, $target);
}
public function uploadFile($path, $target) {
- $this->client->put($target, $path, NET_SFTP_LOCAL_FILE);
+ $this->getConnection()->put($target, $path, NET_SFTP_LOCAL_FILE);
}
public function rename($source, $target) {
@@ -274,7 +287,7 @@ class SFTP extends \OC\Files\Storage\Common {
if (!$this->is_dir($target) && $this->file_exists($target)) {
$this->unlink($target);
}
- return $this->client->rename(
+ return $this->getConnection()->rename(
$this->absPath($source),
$this->absPath($target)
);
@@ -285,7 +298,7 @@ class SFTP extends \OC\Files\Storage\Common {
public function stat($path) {
try {
- $stat = $this->client->stat($this->absPath($path));
+ $stat = $this->getConnection()->stat($this->absPath($path));
$mtime = $stat ? $stat['mtime'] : -1;
$size = $stat ? $stat['size'] : 0;
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index 6a1e12986fb..79effc04874 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -49,6 +49,12 @@ class Swift extends \OC\Files\Storage\Common {
*/
private $bucket;
/**
+ * Connection parameters
+ *
+ * @var array
+ */
+ private $params;
+ /**
* @var array
*/
private static $tmpFiles = array();
@@ -86,7 +92,7 @@ class Swift extends \OC\Files\Storage\Common {
*/
private function doesObjectExist($path) {
try {
- $this->container->getPartialObject($path);
+ $this->getContainer()->getPartialObject($path);
return true;
} catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
@@ -113,41 +119,7 @@ class Swift extends \OC\Files\Storage\Common {
$params['service_name'] = 'cloudFiles';
}
- $settings = array(
- 'username' => $params['user'],
- );
-
- if (!empty($params['password'])) {
- $settings['password'] = $params['password'];
- } else if (!empty($params['key'])) {
- $settings['apiKey'] = $params['key'];
- }
-
- if (!empty($params['tenant'])) {
- $settings['tenantName'] = $params['tenant'];
- }
-
- if (!empty($params['timeout'])) {
- $settings['timeout'] = $params['timeout'];
- }
-
- if (isset($settings['apiKey'])) {
- $this->anchor = new Rackspace($params['url'], $settings);
- } else {
- $this->anchor = new OpenStack($params['url'], $settings);
- }
-
- $this->connection = $this->anchor->objectStoreService($params['service_name'], $params['region']);
-
- try {
- $this->container = $this->connection->getContainer($this->bucket);
- } catch (ClientErrorResponseException $e) {
- $this->container = $this->connection->createContainer($this->bucket);
- }
-
- if (!$this->file_exists('.')) {
- $this->mkdir('.');
- }
+ $this->params = $params;
}
public function mkdir($path) {
@@ -165,7 +137,7 @@ class Swift extends \OC\Files\Storage\Common {
$customHeaders = array('content-type' => 'httpd/unix-directory');
$metadataHeaders = DataObject::stockHeaders(array());
$allHeaders = $customHeaders + $metadataHeaders;
- $this->container->uploadObject($path, '', $allHeaders);
+ $this->getContainer()->uploadObject($path, '', $allHeaders);
} catch (Exceptions\CreateUpdateError $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -205,7 +177,7 @@ class Swift extends \OC\Files\Storage\Common {
}
try {
- $this->container->dataObject()->setName($path . '/')->delete();
+ $this->getContainer()->dataObject()->setName($path . '/')->delete();
} catch (Exceptions\DeleteError $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -228,7 +200,7 @@ class Swift extends \OC\Files\Storage\Common {
try {
$files = array();
/** @var OpenCloud\Common\Collection $objects */
- $objects = $this->container->objectList(array(
+ $objects = $this->getContainer()->objectList(array(
'prefix' => $path,
'delimiter' => '/'
));
@@ -261,7 +233,7 @@ class Swift extends \OC\Files\Storage\Common {
try {
/** @var DataObject $object */
- $object = $this->container->getPartialObject($path);
+ $object = $this->getContainer()->getPartialObject($path);
} catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -314,7 +286,7 @@ class Swift extends \OC\Files\Storage\Common {
}
try {
- $this->container->dataObject()->setName($path)->delete();
+ $this->getContainer()->dataObject()->setName($path)->delete();
} catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -332,7 +304,7 @@ class Swift extends \OC\Files\Storage\Common {
$tmpFile = \OC_Helper::tmpFile();
self::$tmpFiles[$tmpFile] = $path;
try {
- $object = $this->container->getObject($path);
+ $object = $this->getContainer()->getObject($path);
} catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
return false;
@@ -385,7 +357,7 @@ class Swift extends \OC\Files\Storage\Common {
if ($this->is_dir($path)) {
return 'httpd/unix-directory';
} else if ($this->file_exists($path)) {
- $object = $this->container->getPartialObject($path);
+ $object = $this->getContainer()->getPartialObject($path);
return $object->getContentType();
}
return false;
@@ -402,14 +374,15 @@ class Swift extends \OC\Files\Storage\Common {
$path .= '/';
}
- $object = $this->container->getPartialObject($path);
+ $object = $this->getContainer()->getPartialObject($path);
$object->saveMetadata($metadata);
return true;
} else {
- $customHeaders = array('content-type' => 'text/plain');
+ $mimeType = \OC_Helper::getMimetypeDetector()->detectPath($path);
+ $customHeaders = array('content-type' => $mimeType);
$metadataHeaders = DataObject::stockHeaders($metadata);
$allHeaders = $customHeaders + $metadataHeaders;
- $this->container->uploadObject($path, '', $allHeaders);
+ $this->getContainer()->uploadObject($path, '', $allHeaders);
return true;
}
}
@@ -425,7 +398,7 @@ class Swift extends \OC\Files\Storage\Common {
$this->unlink($path2);
try {
- $source = $this->container->getPartialObject($path1);
+ $source = $this->getContainer()->getPartialObject($path1);
$source->copy($this->bucket . '/' . $path2);
} catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
@@ -438,7 +411,7 @@ class Swift extends \OC\Files\Storage\Common {
$this->unlink($path2);
try {
- $source = $this->container->getPartialObject($path1 . '/');
+ $source = $this->getContainer()->getPartialObject($path1 . '/');
$source->copy($this->bucket . '/' . $path2 . '/');
} catch (ClientErrorResponseException $e) {
\OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
@@ -496,16 +469,75 @@ class Swift extends \OC\Files\Storage\Common {
return $this->id;
}
+ /**
+ * Returns the connection
+ *
+ * @return OpenCloud\ObjectStore\Service connected client
+ * @throws \Exception if connection could not be made
+ */
public function getConnection() {
+ if (!is_null($this->connection)) {
+ return $this->connection;
+ }
+
+ $settings = array(
+ 'username' => $this->params['user'],
+ );
+
+ if (!empty($this->params['password'])) {
+ $settings['password'] = $this->params['password'];
+ } else if (!empty($this->params['key'])) {
+ $settings['apiKey'] = $this->params['key'];
+ }
+
+ if (!empty($this->params['tenant'])) {
+ $settings['tenantName'] = $this->params['tenant'];
+ }
+
+ if (!empty($this->params['timeout'])) {
+ $settings['timeout'] = $this->params['timeout'];
+ }
+
+ if (isset($settings['apiKey'])) {
+ $this->anchor = new Rackspace($this->params['url'], $settings);
+ } else {
+ $this->anchor = new OpenStack($this->params['url'], $settings);
+ }
+
+ $this->connection = $this->anchor->objectStoreService($this->params['service_name'], $this->params['region']);
+
return $this->connection;
}
+ /**
+ * Returns the initialized object store container.
+ *
+ * @return OpenCloud\ObjectStore\Resource\Container
+ */
+ public function getContainer() {
+ if (!is_null($this->container)) {
+ return $this->container;
+ }
+
+ try {
+ $this->container = $this->getConnection()->getContainer($this->bucket);
+ } catch (ClientErrorResponseException $e) {
+ $this->container = $this->getConnection()->createContainer($this->bucket);
+ }
+
+ if (!$this->file_exists('.')) {
+ $this->mkdir('.');
+ }
+
+ return $this->container;
+ }
+
public function writeBack($tmpFile) {
if (!isset(self::$tmpFiles[$tmpFile])) {
return false;
}
$fileData = fopen($tmpFile, 'r');
- $this->container->uploadObject(self::$tmpFiles[$tmpFile], $fileData);
+ $this->getContainer()->uploadObject(self::$tmpFiles[$tmpFile], $fileData);
unlink($tmpFile);
}
diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php
index a279163ff70..a279163ff70 100755..100644
--- a/apps/files_external/personal.php
+++ b/apps/files_external/personal.php
diff --git a/apps/files_sharing/ajax/list.php b/apps/files_sharing/ajax/list.php
index 93964c5ed5b..7e2e54a1bd9 100644
--- a/apps/files_sharing/ajax/list.php
+++ b/apps/files_sharing/ajax/list.php
@@ -76,7 +76,7 @@ $data['dirToken'] = $linkItem['token'];
$permissions = $linkItem['permissions'];
// if globally disabled
-if (OC_Appconfig::getValue('core', 'shareapi_allow_public_upload', 'yes') === 'no') {
+if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_allow_public_upload', 'yes') === 'no') {
// only allow reading
$permissions = \OCP\PERMISSION_READ;
}
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index b3036254401..c4b5508692e 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -85,7 +85,7 @@ OCA.Sharing.PublicApp = {
};
var img = $('<img class="publicpreview">');
- if (previewSupported === 'true' || mimetype.substr(0, mimetype.indexOf('/')) === 'image') {
+ if (previewSupported === 'true' || 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');
} else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') {
diff --git a/apps/files_sharing/l10n/el.php b/apps/files_sharing/l10n/el.php
index d12f4b56166..a4d8e35d90e 100644
--- a/apps/files_sharing/l10n/el.php
+++ b/apps/files_sharing/l10n/el.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Server to server sharing is not enabled on this server" => "Ο διαμοιρασμός μεταξύ διακομιστών δεν έχει ενεργοποιηθεί σε αυτόν το διακομιστή",
+"The mountpoint name contains invalid characters." => "Το όνομα σημείου προσάρτησης περιέχει μη έγκυρους χαρακτήρες.",
"Invalid or untrusted SSL certificate" => "Μη έγκυρο ή μη έμπιστο πιστοποιητικό SSL",
"Couldn't add remote share" => "Αδυναμία προσθήκης απομακρυσμένου κοινόχρηστου φακέλου",
"Shared with you" => "Διαμοιρασμένο με εσάς",
diff --git a/apps/files_sharing/l10n/et_EE.php b/apps/files_sharing/l10n/et_EE.php
index d0fb98e4ee2..e087af6b9e3 100644
--- a/apps/files_sharing/l10n/et_EE.php
+++ b/apps/files_sharing/l10n/et_EE.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Server to server sharing is not enabled on this server" => "Serverist serverisse jagamine pole antud serveris lubatud",
+"The mountpoint name contains invalid characters." => "Ühenduspunkti nimes on vigaseid märke.",
"Invalid or untrusted SSL certificate" => "Vigane või tundmatu SSL sertifikaat",
"Couldn't add remote share" => "Ei suutnud lisada kaugjagamist",
"Shared with you" => "Sinuga jagatud",
diff --git a/apps/files_sharing/l10n/hu_HU.php b/apps/files_sharing/l10n/hu_HU.php
index 0194e0aa6b3..aee8a5151d7 100644
--- a/apps/files_sharing/l10n/hu_HU.php
+++ b/apps/files_sharing/l10n/hu_HU.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Server to server sharing is not enabled on this server" => "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
+"The mountpoint name contains invalid characters." => "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
"Invalid or untrusted SSL certificate" => "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
"Couldn't add remote share" => "A távoli megosztás nem hozható létre",
"Shared with you" => "Velem osztották meg",
diff --git a/apps/files_sharing/l10n/id.php b/apps/files_sharing/l10n/id.php
index c591cbad7f3..10ff3cf0530 100644
--- a/apps/files_sharing/l10n/id.php
+++ b/apps/files_sharing/l10n/id.php
@@ -1,13 +1,20 @@
<?php
$TRANSLATIONS = array(
-"Server to server sharing is not enabled on this server" => "Berbagi server ke server tidaj diaktifkan pada server ini",
+"Server to server sharing is not enabled on this server" => "Berbagi server ke server tidak diaktifkan pada server ini",
+"The mountpoint name contains invalid characters." => "Nama titik kait berisi karakter yang tidak sah.",
+"Invalid or untrusted SSL certificate" => "Sertifikast SSL tidak sah atau tidak terpercaya",
+"Couldn't add remote share" => "Tidak dapat menambahkan berbagi remote",
"Shared with you" => "Dibagikan dengan Anda",
"Shared with others" => "Dibagikan dengan lainnya",
"Shared by link" => "Dibagikan dengan tautan",
"No files have been shared with you yet." => "Tidak ada berkas yang dibagikan kepada Anda.",
"You haven't shared any files yet." => "Anda belum berbagi berkas apapun.",
"You haven't shared any files by link yet." => "Anda belum berbagi berkas dengan tautan satupun.",
+"Do you want to add the remote share {name} from {owner}@{remote}?" => "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?",
+"Remote share" => "Berbagi remote",
+"Remote share password" => "Sandi berbagi remote",
"Cancel" => "Batal",
+"Add remote share" => "Tambah berbagi remote",
"No ownCloud installation found at {remote}" => "Tidak ada instalasi ownCloud yang ditemukan di {remote}",
"Invalid ownCloud url" => "URL ownCloud tidak sah",
"Shared by" => "Dibagikan oleh",
@@ -17,14 +24,17 @@ $TRANSLATIONS = array(
"Name" => "Nama",
"Share time" => "Bagikan waktu",
"Sorry, this link doesn’t seem to work anymore." => "Maaf, tautan ini tampaknya tidak berfungsi lagi.",
-"Reasons might be:" => "Alasan mungkin:",
+"Reasons might be:" => "Alasan yang mungkin:",
"the item was removed" => "item telah dihapus",
"the link expired" => "tautan telah kadaluarsa",
"sharing is disabled" => "berbagi dinonaktifkan",
"For more info, please ask the person who sent this link." => "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini.",
+"Add to your ownCloud" => "Tambahkan ke ownCloud Anda",
"Download" => "Unduh",
"Download %s" => "Unduh %s",
"Direct link" => "Tautan langsung",
+"Remote Shares" => "Berbagi Remote",
+"Allow other instances to mount public links shared from this server" => "Izinkan instansi lain untuk mengaitkan tautan publik untuk dibagikan dari server ini",
"Allow users to mount public link shares" => "Izinkan pengguna untuk mengaitkan tautan berbagi publik"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_sharing/l10n/pt_PT.php b/apps/files_sharing/l10n/pt_PT.php
index fc5c7cabec5..59acb2d243a 100644
--- a/apps/files_sharing/l10n/pt_PT.php
+++ b/apps/files_sharing/l10n/pt_PT.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Server to server sharing is not enabled on this server" => "A partilha entre servidores não se encontra disponível",
+"The mountpoint name contains invalid characters." => "O nome de mountpoint contém caracteres inválidos.",
"Invalid or untrusted SSL certificate" => "Certificado SSL inválido ou não confiável",
"Couldn't add remote share" => "Ocorreu um erro ao adicionar a partilha remota",
"Shared with you" => "Partilhado consigo ",
diff --git a/apps/files_sharing/l10n/uk.php b/apps/files_sharing/l10n/uk.php
index 48297bcf2b3..da1fe1acdd1 100644
--- a/apps/files_sharing/l10n/uk.php
+++ b/apps/files_sharing/l10n/uk.php
@@ -1,19 +1,40 @@
<?php
$TRANSLATIONS = array(
+"Server to server sharing is not enabled on this server" => "На даному сервері вимкнута можливість передачі даних між серверами",
+"The mountpoint name contains invalid characters." => "Ім'я точки монтування містить неприпустимі символи.",
+"Invalid or untrusted SSL certificate" => "Недійсній або не довірений SSL-сертифікат",
+"Couldn't add remote share" => "Неможливо додати віддалену загальну теку",
+"Shared with you" => "Доступне для вас",
+"Shared with others" => "Доступне для інших",
+"Shared by link" => "Доступне за посиланням",
+"No files have been shared with you yet." => "Доступні для вас файли відсутні.",
+"You haven't shared any files yet." => "Ви не маєте загальнодоступних файлів.",
+"You haven't shared any files by link yet." => "Ви ще не відкрили доступ за посиланням для жодного з файлів.",
+"Do you want to add the remote share {name} from {owner}@{remote}?" => "Додати віддалену загальну теку {name} з {owner}@{remote}?",
+"Remote share" => "Віддалена загальна тека",
+"Remote share password" => "Пароль для віддаленої загальної теки",
"Cancel" => "Відмінити",
+"Add remote share" => "Додати віддалену загальну теку",
+"No ownCloud installation found at {remote}" => "Не знайдено ownCloud на {remote}",
+"Invalid ownCloud url" => "Невірний ownCloud URL",
"Shared by" => "Опубліковано",
"This share is password-protected" => "Цей ресурс обміну захищений паролем",
"The password is wrong. Try again." => "Невірний пароль. Спробуйте ще раз.",
"Password" => "Пароль",
"Name" => "Ім'я",
+"Share time" => "Дата публікації",
"Sorry, this link doesn’t seem to work anymore." => "На жаль, посилання більше не працює.",
"Reasons might be:" => "Можливі причини:",
"the item was removed" => "цей пункт був вилучений",
"the link expired" => "посилання застаріло",
"sharing is disabled" => "обмін заборонений",
"For more info, please ask the person who sent this link." => "Для отримання додаткової інформації, будь ласка, зверніться до особи, яка надіслала це посилання.",
+"Add to your ownCloud" => "Додати до вашого ownCloud",
"Download" => "Завантажити",
"Download %s" => "Завантажити %s",
-"Direct link" => "Пряме посилання"
+"Direct link" => "Пряме посилання",
+"Remote Shares" => "Віддалені загальні теки",
+"Allow other instances to mount public links shared from this server" => "Дозволити іншим ownCloud монтувати посилання, опублікованих на цьому сервері",
+"Allow users to mount public link shares" => "Дозволити користувачам монтувати монтувати посилання на загальні теки"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index fd3d25564b6..035aa1b6a5b 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -180,7 +180,7 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
// sharing file to a user should work if shareapi_exclude_groups is set
// to no
- \OC_Appconfig::setValue('core', 'shareapi_exclude_groups', 'no');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
$_POST['path'] = $this->filename;
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
$_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER;
@@ -204,8 +204,8 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
$this->assertTrue($result);
// exclude groups, but not the group the user belongs to. Sharing should still work
- \OC_Appconfig::setValue('core', 'shareapi_exclude_groups', 'yes');
- \OC_Appconfig::setValue('core', 'shareapi_exclude_groups_list', 'admin,group1,group2');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'yes');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group1,group2');
$_POST['path'] = $this->filename;
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
@@ -230,7 +230,7 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
$this->assertTrue($result);
// now we exclude the group the user belongs to ('group'), sharing should fail now
- \OC_Appconfig::setValue('core', 'shareapi_exclude_groups_list', 'admin,group');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group');
$_POST['path'] = $this->filename;
$_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2;
@@ -241,8 +241,8 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
$this->assertFalse($result->succeeded());
// cleanup
- \OC_Appconfig::setValue('core', 'shareapi_exclude_groups', 'no');
- \OC_Appconfig::setValue('core', 'shareapi_exclude_groups_list', '');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', '');
}
@@ -1209,9 +1209,9 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
public function testDefaultExpireDate() {
\Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1);
- \OC_Appconfig::setValue('core', 'shareapi_default_expire_date', 'yes');
- \OC_Appconfig::setValue('core', 'shareapi_enforce_expire_date', 'yes');
- \OC_Appconfig::setValue('core', 'shareapi_expire_after_n_days', '2');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_default_expire_date', 'yes');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_enforce_expire_date', 'yes');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_expire_after_n_days', '2');
// default expire date is set to 2 days
// the time when the share was created is set to 3 days in the past
@@ -1255,8 +1255,8 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
//cleanup
$result = \OCP\Share::unshare('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2);
$this->assertTrue($result);
- \OC_Appconfig::setValue('core', 'shareapi_default_expire_date', 'no');
- \OC_Appconfig::setValue('core', 'shareapi_enforce_expire_date', 'no');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_default_expire_date', 'no');
+ \OC::$server->getAppConfig()->setValue('core', 'shareapi_enforce_expire_date', 'no');
}
}
diff --git a/apps/files_sharing/tests/base.php b/apps/files_sharing/tests/base.php
index 738ba3493ba..6bc02ec2008 100644
--- a/apps/files_sharing/tests/base.php
+++ b/apps/files_sharing/tests/base.php
@@ -37,7 +37,7 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
const TEST_FILES_SHARING_API_GROUP1 = "test-share-group1";
- public $stateFilesEncryption;
+ public static $stateFilesEncryption;
public $filename;
public $data;
/**
@@ -48,6 +48,13 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
public $subfolder;
public static function setUpBeforeClass() {
+
+ // remember files_encryption state
+ self::$stateFilesEncryption = \OC_App::isEnabled('files_encryption');
+
+ //we don't want to tests with app files_encryption enabled
+ \OC_App::disable('files_encryption');
+
// reset backend
\OC_User::clearBackends();
\OC_User::useBackend('database');
@@ -70,29 +77,16 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
function setUp() {
+ $this->assertFalse(\OC_App::isEnabled('files_encryption'));
+
//login as user1
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
$this->data = 'foobar';
$this->view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
- // remember files_encryption state
- $this->stateFilesEncryption = \OC_App::isEnabled('files_encryption');
-
- //we don't want to tests with app files_encryption enabled
- \OC_App::disable('files_encryption');
-
-
- $this->assertTrue(!\OC_App::isEnabled('files_encryption'));
}
function tearDown() {
- // reset app files_encryption
- if ($this->stateFilesEncryption) {
- \OC_App::enable('files_encryption');
- } else {
- \OC_App::disable('files_encryption');
- }
-
$query = \OCP\DB::prepare('DELETE FROM `*PREFIX*share`');
$query->execute();
}
@@ -106,6 +100,13 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
// delete group
\OC_Group::deleteGroup(self::TEST_FILES_SHARING_API_GROUP1);
+
+ // reset app files_encryption
+ if (self::$stateFilesEncryption) {
+ \OC_App::enable('files_encryption');
+ } else {
+ \OC_App::disable('files_encryption');
+ }
}
/**
@@ -126,9 +127,9 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
}
\OC_Util::tearDownFS();
- \OC_User::setUserId('');
+ \OC::$server->getUserSession()->setUser(null);
\OC\Files\Filesystem::tearDown();
- \OC_User::setUserId($user);
+ \OC::$server->getUserSession()->login($user, $password);
\OC_Util::setupFS($user);
}
diff --git a/apps/files_trashbin/l10n/ro.php b/apps/files_trashbin/l10n/ro.php
index b00f37615f8..eb8d6b81b7d 100644
--- a/apps/files_trashbin/l10n/ro.php
+++ b/apps/files_trashbin/l10n/ro.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Deleted files" => "Sterge fisierele",
+"Restore" => "Restabilire",
"Error" => "Eroare",
"Name" => "Nume",
"Delete" => "Șterge"
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 120df345dda..3d90791108e 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -434,10 +434,10 @@ class Trashbin {
* @param string $filename name of file once it was deleted
* @param string $uniqueFilename new file name to restore the file without overwriting existing files
* @param string $location location if file
- * @param int $timestamp deleteion time
- *
+ * @param int $timestamp deletion time
+ * @return bool
*/
- private static function restoreVersions($view, $file, $filename, $uniqueFilename, $location, $timestamp) {
+ private static function restoreVersions(\OC\Files\View $view, $file, $filename, $uniqueFilename, $location, $timestamp) {
if (\OCP\App::isEnabled('files_versions')) {
// disable proxy to prevent recursive calls
@@ -488,10 +488,10 @@ class Trashbin {
* @param string $filename name of file
* @param string $uniqueFilename new file name to restore the file without overwriting existing files
* @param string $location location of file
- * @param int $timestamp deleteion time
- *
+ * @param int $timestamp deletion time
+ * @return bool
*/
- private static function restoreEncryptionKeys($view, $file, $filename, $uniqueFilename, $location, $timestamp) {
+ private static function restoreEncryptionKeys(\OC\Files\View $view, $file, $filename, $uniqueFilename, $location, $timestamp) {
// Take care of encryption keys TODO! Get '.key' in file between file name and delete date (also for permanent delete!)
if (\OCP\App::isEnabled('files_encryption')) {
$user = \OCP\User::getUser();
@@ -639,8 +639,12 @@ class Trashbin {
/**
* @param \OC\Files\View $view
+ * @param $file
+ * @param $filename
+ * @param $timestamp
+ * @return int
*/
- private static function deleteVersions($view, $file, $filename, $timestamp) {
+ private static function deleteVersions(\OC\Files\View $view, $file, $filename, $timestamp) {
$size = 0;
if (\OCP\App::isEnabled('files_versions')) {
$user = \OCP\User::getUser();
@@ -664,8 +668,12 @@ class Trashbin {
/**
* @param \OC\Files\View $view
+ * @param $file
+ * @param $filename
+ * @param $timestamp
+ * @return int
*/
- private static function deleteEncryptionKeys($view, $file, $filename, $timestamp) {
+ private static function deleteEncryptionKeys(\OC\Files\View $view, $file, $filename, $timestamp) {
$size = 0;
if (\OCP\App::isEnabled('files_encryption')) {
$user = \OCP\User::getUser();
@@ -745,6 +753,9 @@ class Trashbin {
if ($quota === null || $quota === 'none') {
$quota = \OC\Files\Filesystem::free_space('/');
$softQuota = false;
+ if ($quota === \OCP\Files\FileInfo::SPACE_UNKNOWN) {
+ $quota = 0;
+ }
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
@@ -876,8 +887,10 @@ class Trashbin {
* @param string $source source path, relative to the users files directory
* @param string $destination destination path relative to the users root directoy
* @param \OC\Files\View $view file view for the users root directory
+ * @return int
+ * @throws Exceptions\CopyRecursiveException
*/
- private static function copy_recursive($source, $destination, $view) {
+ private static function copy_recursive($source, $destination, \OC\Files\View $view) {
$size = 0;
if ($view->is_dir($source)) {
$view->mkdir($destination);
@@ -911,24 +924,29 @@ class Trashbin {
*
* @param string $filename name of the file which should be restored
* @param int $timestamp timestamp when the file was deleted
+ * @return array
*/
private static function getVersionsFromTrash($filename, $timestamp) {
$view = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_trashbin/versions');
- $versionsName = $view->getLocalFile($filename) . '.v';
- $escapedVersionsName = preg_replace('/(\*|\?|\[)/', '[$1]', $versionsName);
$versions = array();
+
+ //force rescan of versions, local storage may not have updated the cache
+ /** @var \OC\Files\Storage\Storage $storage */
+ list($storage, ) = $view->resolvePath('/');
+ $storage->getScanner()->scan('');
+
if ($timestamp) {
// fetch for old versions
- $matches = glob($escapedVersionsName . '*.d' . $timestamp);
+ $matches = $view->searchRaw($filename . '.v%.d' . $timestamp);
$offset = -strlen($timestamp) - 2;
} else {
- $matches = glob($escapedVersionsName . '*');
+ $matches = $view->searchRaw($filename . '.v%');
}
if (is_array($matches)) {
foreach ($matches as $ma) {
if ($timestamp) {
- $parts = explode('.v', substr($ma, 0, $offset));
+ $parts = explode('.v', substr($ma['path'], 0, $offset));
$versions[] = (end($parts));
} else {
$parts = explode('.v', $ma);
@@ -947,7 +965,7 @@ class Trashbin {
* @param \OC\Files\View $view filesystem view relative to users root directory
* @return string with unique extension
*/
- private static function getUniqueFilename($location, $filename, $view) {
+ private static function getUniqueFilename($location, $filename, \OC\Files\View $view) {
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$name = pathinfo($filename, PATHINFO_FILENAME);
$l = \OC::$server->getL10N('files_trashbin');
@@ -1028,6 +1046,7 @@ class Trashbin {
/**
* check if trash bin is empty for a given user
* @param string $user
+ * @return bool
*/
public static function isEmpty($user) {
@@ -1042,6 +1061,10 @@ class Trashbin {
return true;
}
+ /**
+ * @param $path
+ * @return string
+ */
public static function preview_icon($path) {
return \OC_Helper::linkToRoute('core_ajax_trashbin_preview', array('x' => 36, 'y' => 36, 'file' => $path));
}
diff --git a/apps/files_versions/l10n/ro.php b/apps/files_versions/l10n/ro.php
index 5151b1dceb9..cc8c6e19311 100644
--- a/apps/files_versions/l10n/ro.php
+++ b/apps/files_versions/l10n/ro.php
@@ -1,6 +1,9 @@
<?php
$TRANSLATIONS = array(
"Could not revert: %s" => "Nu a putut reveni: %s",
-"Versions" => "Versiuni"
+"Versions" => "Versiuni",
+"More versions..." => "Mai multe versiuni...",
+"No other versions available" => "Nu există alte versiuni disponibile",
+"Restore" => "Restabilire"
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));";
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 1e706ce869b..5fad23de4f6 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -19,7 +19,7 @@ foreach($configPrefixes as $config) {
'user_ldap', $config.'ldap_uuid_user_attribute', 'not existing');
if($state === 'non existing') {
$value = \OCP\Config::getAppValue(
- 'user_ldap', $config.'ldap_uuid_attribute', 'auto');
+ 'user_ldap', $config.'ldap_uuid_attribute', '');
\OCP\Config::setAppValue(
'user_ldap', $config.'ldap_uuid_user_attribute', $value);
\OCP\Config::setAppValue(
@@ -30,7 +30,7 @@ foreach($configPrefixes as $config) {
'user_ldap', $config.'ldap_expert_uuid_user_attr', 'not existing');
if($state === 'non existing') {
$value = \OCP\Config::getAppValue(
- 'user_ldap', $config.'ldap_expert_uuid_attr', 'auto');
+ 'user_ldap', $config.'ldap_expert_uuid_attr', '');
\OCP\Config::setAppValue(
'user_ldap', $config.'ldap_expert_uuid_user_attr', $value);
\OCP\Config::setAppValue(
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index 17b2ccd9bf9..6f2743d65dc 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.4.3
+0.4.4
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
index 3051cc8058e..8f339451c64 100644
--- a/apps/user_ldap/css/settings.css
+++ b/apps/user_ldap/css/settings.css
@@ -6,6 +6,7 @@
.tablerow {
display: table-row;
white-space: nowrap;
+ text-align: left;
}
.tablerow input, .tablerow textarea {
@@ -16,6 +17,10 @@
height: 15px;
}
+#ldap .tablerow label {
+ margin-left: 3px;
+}
+
.invisible {
visibility: hidden;
}
@@ -77,6 +82,10 @@
margin: 5px;
}
+.ldap_count {
+ line-height: 45px;
+}
+
.ldapSettingControls {
margin-top: 3px;
}
@@ -103,6 +112,10 @@
vertical-align: bottom;
}
+#ldap input[type=checkbox] {
+ width: 15px !important;
+}
+
select[multiple=multiple] + button {
height: 28px;
padding-top: 6px !important;
@@ -110,6 +123,18 @@ select[multiple=multiple] + button {
max-width: 40%;
}
+.save-cursor {
+ cursor: wait;
+}
+
+#ldap .ldap_saving {
+ margin-right: 15px;
+ color: orange;
+ font-weight: bold;
+}
+
+#ldap .ldap_saving img { height: 15px; }
+
.ldap_config_state_indicator_sign {
display: inline-block;
height: 16px;
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 48d097c3600..e8d268d3df2 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -29,6 +29,16 @@ use OCA\user_ldap\lib\BackendUtility;
class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
protected $enabled = false;
+ /**
+ * @var string[] $cachedGroupMembers array of users with gid as key
+ */
+ protected $cachedGroupMembers = array();
+
+ /**
+ * @var string[] $cachedGroupsByMember array of groups with uid as key
+ */
+ protected $cachedGroupsByMember = array();
+
public function __construct(Access $access) {
parent::__construct($access);
$filter = $this->access->connection->ldapGroupFilter;
@@ -56,6 +66,21 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
}
$userDN = $this->access->username2dn($uid);
+
+ if(isset($this->cachedGroupMembers[$gid])) {
+ $isInGroup = in_array($userDN, $this->cachedGroupMembers[$gid]);
+ return $isInGroup;
+ }
+
+ $cacheKeyMembers = 'inGroup-members:'.$gid;
+ if($this->access->connection->isCached($cacheKeyMembers)) {
+ $members = $this->access->connection->getFromCache($cacheKeyMembers);
+ $this->cachedGroupMembers[$gid] = $members;
+ $isInGroup = in_array($userDN, $members);
+ $this->access->connection->writeToCache($cacheKey, $isInGroup);
+ return $isInGroup;
+ }
+
$groupDN = $this->access->groupname2dn($gid);
// just in case
if(!$groupDN || !$userDN) {
@@ -70,29 +95,44 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
}
//usually, LDAP attributes are said to be case insensitive. But there are exceptions of course.
- $members = array_keys($this->_groupMembers($groupDN));
- if(!$members) {
+ $members = $this->_groupMembers($groupDN);
+ $members = array_keys($members); // uids are returned as keys
+ if(!is_array($members) || count($members) === 0) {
$this->access->connection->writeToCache($cacheKey, false);
return false;
}
//extra work if we don't get back user DNs
- //TODO: this can be done with one LDAP query
if(strtolower($this->access->connection->ldapGroupMemberAssocAttr) === 'memberuid') {
$dns = array();
+ $filterParts = array();
+ $bytes = 0;
foreach($members as $mid) {
$filter = str_replace('%uid', $mid, $this->access->connection->ldapLoginFilter);
- $ldap_users = $this->access->fetchListOfUsers($filter, 'dn');
- if(count($ldap_users) < 1) {
- continue;
+ $filterParts[] = $filter;
+ $bytes += strlen($filter);
+ if($bytes >= 9000000) {
+ // AD has a default input buffer of 10 MB, we do not want
+ // to take even the chance to exceed it
+ $filter = $this->access->combineFilterWithOr($filterParts);
+ $bytes = 0;
+ $filterParts = array();
+ $users = $this->access->fetchListOfUsers($filter, 'dn', count($filterParts));
+ $dns = array_merge($dns, $users);
}
- $dns[] = $ldap_users[0];
+ }
+ if(count($filterParts) > 0) {
+ $filter = $this->access->combineFilterWithOr($filterParts);
+ $users = $this->access->fetchListOfUsers($filter, 'dn', count($filterParts));
+ $dns = array_merge($dns, $users);
}
$members = $dns;
}
$isInGroup = in_array($userDN, $members);
$this->access->connection->writeToCache($cacheKey, $isInGroup);
+ $this->access->connection->writeToCache($cacheKeyMembers, $members);
+ $this->cachedGroupMembers[$gid] = $members;
return $isInGroup;
}
@@ -293,8 +333,13 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
$uid = $userDN;
}
- $groups = array_values($this->getGroupsByMember($uid));
- $groups = $this->access->ownCloudGroupNames($groups);
+ if(isset($this->cachedGroupsByMember[$uid])) {
+ $groups = $this->cachedGroupsByMember[$uid];
+ } else {
+ $groups = array_values($this->getGroupsByMember($uid));
+ $groups = $this->access->ownCloudGroupNames($groups);
+ $this->cachedGroupsByMember[$uid] = $groups;
+ }
$primaryGroup = $this->getUserPrimaryGroup($userDN);
if($primaryGroup !== false) {
diff --git a/apps/user_ldap/js/experiencedAdmin.js b/apps/user_ldap/js/experiencedAdmin.js
new file mode 100644
index 00000000000..fac8dd6470f
--- /dev/null
+++ b/apps/user_ldap/js/experiencedAdmin.js
@@ -0,0 +1,100 @@
+/**
+ * Copyright (c) 2014, Arthur Schiwon <blizzz@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+
+/* global LdapWizard */
+
+/**
+ * controls behaviour depend on whether the admin is experienced in LDAP or not.
+ *
+ * @class
+ * @param {object} wizard the LDAP Wizard object
+ * @param {boolean} initialState whether the admin is experienced or not
+ */
+function ExperiencedAdmin(wizard, initialState) {
+ this.wizard = wizard;
+ this._isExperienced = initialState;
+ if(this._isExperienced) {
+ this.hideEntryCounters();
+ }
+}
+
+
+/**
+ * toggles whether the admin is an experienced one or not
+ *
+ * @param {boolean} whether the admin is experienced or not
+ */
+ExperiencedAdmin.prototype.setExperienced = function(isExperienced) {
+ this._isExperienced = isExperienced;
+ if(this._isExperienced) {
+ this.enableRawMode();
+ this.hideEntryCounters();
+ } else {
+ this.showEntryCounters();
+ }
+};
+
+/**
+* answers whether the admin is an experienced one or not
+*
+* @return {boolean} whether the admin is experienced or not
+*/
+ExperiencedAdmin.prototype.isExperienced = function() {
+ return this._isExperienced;
+};
+
+/**
+ * switches all LDAP filters from Assisted to Raw mode.
+ */
+ExperiencedAdmin.prototype.enableRawMode = function() {
+ var containers = {
+ 'toggleRawGroupFilter': '#rawGroupFilterContainer',
+ 'toggleRawLoginFilter': '#rawLoginFilterContainer',
+ 'toggleRawUserFilter' : '#rawUserFilterContainer'
+ };
+
+ for(var method in containers) {
+ if($(containers[method]).hasClass('invisible')) {
+ this.wizard[method]();
+ }
+ }
+};
+
+ExperiencedAdmin.prototype.updateUserTab = function(mode) {
+ this._updateTab(mode, $('#ldap_user_count'));
+};
+
+ExperiencedAdmin.prototype.updateGroupTab = function(mode) {
+ this._updateTab(mode, $('#ldap_group_count'));
+};
+
+ExperiencedAdmin.prototype._updateTab = function(mode, $countEl) {
+ if(mode === LdapWizard.filterModeAssisted) {
+ $countEl.removeClass('hidden');
+ } else if(!this._isExperienced) {
+ $countEl.removeClass('hidden');
+ } else {
+ $countEl.addClass('hidden');
+ }
+};
+
+/**
+ * hide user and group counters, they will be displayed on demand only
+ */
+ExperiencedAdmin.prototype.hideEntryCounters = function() {
+ $('#ldap_user_count').addClass('hidden');
+ $('#ldap_group_count').addClass('hidden');
+ $('.ldapGetEntryCount').removeClass('hidden');
+};
+
+/**
+* shows user and group counters, they will be displayed on demand only
+*/
+ExperiencedAdmin.prototype.showEntryCounters = function() {
+ $('#ldap_user_count').removeClass('hidden');
+ $('#ldap_group_count').removeClass('hidden');
+ $('.ldapGetEntryCount').addClass('hidden');
+};
diff --git a/apps/user_ldap/js/ldapFilter.js b/apps/user_ldap/js/ldapFilter.js
index e9f60e7ba3c..bb66c1df2ee 100644
--- a/apps/user_ldap/js/ldapFilter.js
+++ b/apps/user_ldap/js/ldapFilter.js
@@ -1,19 +1,30 @@
/* global LdapWizard */
-function LdapFilter(target) {
+function LdapFilter(target, determineModeCallback) {
this.locked = true;
this.target = false;
this.mode = LdapWizard.filterModeAssisted;
this.lazyRunCompose = false;
+ this.determineModeCallback = determineModeCallback;
+ this.foundFeatures = false;
+ this.activated = false;
if( target === 'User' ||
target === 'Login' ||
target === 'Group') {
this.target = target;
- this.determineMode();
}
}
+LdapFilter.prototype.activate = function() {
+ if(this.activated) {
+ return;
+ }
+ this.activated = true;
+
+ this.determineMode();
+};
+
LdapFilter.prototype.compose = function(callback) {
var action;
@@ -22,6 +33,11 @@ LdapFilter.prototype.compose = function(callback) {
return false;
}
+ if(this.mode === LdapWizard.filterModeRaw) {
+ //Raw filter editing, i.e. user defined filter, don't compose
+ return;
+ }
+
if(this.target === 'User') {
action = 'getUserListFilter';
} else if(this.target === 'Login') {
@@ -30,11 +46,6 @@ LdapFilter.prototype.compose = function(callback) {
action = 'getGroupFilter';
}
- if(!$('#raw'+this.target+'FilterContainer').hasClass('invisible')) {
- //Raw filter editing, i.e. user defined filter, don't compose
- return;
- }
-
var param = 'action='+action+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
@@ -44,10 +55,8 @@ LdapFilter.prototype.compose = function(callback) {
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
- if(filter.target === 'User') {
- LdapWizard.countUsers();
- } else if(filter.target === 'Group') {
- LdapWizard.countGroups();
+ filter.updateCount();
+ if(filter.target === 'Group') {
LdapWizard.detectGroupMemberAssoc();
}
if(typeof callback !== 'undefined') {
@@ -82,6 +91,7 @@ LdapFilter.prototype.determineMode = function() {
filter.mode + '« of type ' + typeof filter.mode);
}
filter.unlock();
+ filter.determineModeCallback(filter.mode);
},
function () {
//on error case get back to default i.e. Assisted
@@ -90,10 +100,21 @@ LdapFilter.prototype.determineMode = function() {
filter.mode = LdapWizard.filterModeAssisted;
}
filter.unlock();
+ filter.determineModeCallback(filter.mode);
}
);
};
+LdapFilter.prototype.setMode = function(mode) {
+ if(mode === LdapWizard.filterModeAssisted || mode === LdapWizard.filterModeRaw) {
+ this.mode = mode;
+ }
+};
+
+LdapFilter.prototype.getMode = function() {
+ return this.mode;
+};
+
LdapFilter.prototype.unlock = function() {
this.locked = false;
if(this.lazyRunCompose) {
@@ -101,3 +122,33 @@ LdapFilter.prototype.unlock = function() {
this.compose();
}
};
+
+LdapFilter.prototype.findFeatures = function() {
+ //TODO: reset this.foundFeatures when any base DN changes
+ if(!this.foundFeatures && !this.locked && this.mode === LdapWizard.filterModeAssisted) {
+ this.foundFeatures = true;
+ var objcEl, avgrEl;
+ if(this.target === 'User') {
+ objcEl = 'ldap_userfilter_objectclass';
+ avgrEl = 'ldap_userfilter_groups';
+ } else if (this.target === 'Group') {
+ objcEl = 'ldap_groupfilter_objectclass';
+ avgrEl = 'ldap_groupfilter_groups';
+ } else if (this.target === 'Login') {
+ LdapWizard.findAttributes();
+ return;
+ } else {
+ return false;
+ }
+ LdapWizard.findObjectClasses(objcEl, this.target);
+ LdapWizard.findAvailableGroups(avgrEl, this.target + "s");
+ }
+};
+
+LdapFilter.prototype.updateCount = function(doneCallback) {
+ if(this.target === 'User') {
+ LdapWizard.countUsers(doneCallback);
+ } else if (this.target === 'Group') {
+ LdapWizard.countGroups(doneCallback);
+ }
+};
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index fd84ca1980b..1627528200f 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -122,7 +122,7 @@ var LdapConfiguration = {
OC.filePath('user_ldap','ajax','clearMappings.php'),
'ldap_clear_mapping='+encodeURIComponent(mappingSubject),
function(result) {
- if(result.status == 'success') {
+ if(result.status === 'success') {
OC.dialogs.info(
t('user_ldap', 'mappings cleared'),
t('user_ldap', 'Success')
@@ -148,23 +148,32 @@ var LdapWizard = {
userFilter: false,
loginFilter: false,
groupFilter: false,
+ ajaxRequests: {},
- ajax: function(param, fnOnSuccess, fnOnError) {
- $.post(
+ ajax: function(param, fnOnSuccess, fnOnError, reqID) {
+ if(reqID !== undefined) {
+ if(LdapWizard.ajaxRequests.hasOwnProperty(reqID)) {
+ LdapWizard.ajaxRequests[reqID].abort();
+ }
+ }
+ var request = $.post(
OC.filePath('user_ldap','ajax','wizard.php'),
param,
function(result) {
- if(result.status == 'success') {
+ if(result.status === 'success') {
fnOnSuccess(result);
} else {
fnOnError(result);
}
}
);
+ if(reqID !== undefined) {
+ LdapWizard.ajaxRequests[reqID] = request;
+ }
},
applyChanges: function (result) {
- for (id in result.changes) {
+ for (var id in result.changes) {
LdapWizard.blacklistAdd(id);
if(id.indexOf('count') > 0) {
$('#'+id).text(result.changes[id]);
@@ -179,28 +188,41 @@ var LdapWizard = {
}
},
+ enableTabs: function() {
+ //do not use this function directly, use basicStatusCheck instead.
+ if(LdapWizard.saveProcesses === 0) {
+ $('.ldap_action_continue').removeAttr('disabled');
+ $('.ldap_action_back').removeAttr('disabled');
+ $('#ldapSettings').tabs('option', 'disabled', []);
+ }
+ },
+
+ disableTabs: function() {
+ $('.ldap_action_continue').attr('disabled', 'disabled');
+ $('.ldap_action_back').attr('disabled', 'disabled');
+ $('#ldapSettings').tabs('option', 'disabled', [1, 2, 3, 4, 5]);
+ },
+
basicStatusCheck: function() {
//criterias to continue from the first tab
// - host, port, user filter, agent dn, password, base dn
- host = $('#ldap_host').val();
- port = $('#ldap_port').val();
- agent = $('#ldap_dn').val();
- pwd = $('#ldap_agent_password').val();
- base = $('#ldap_base').val();
+ var host = $('#ldap_host').val();
+ var port = $('#ldap_port').val();
+ var agent = $('#ldap_dn').val();
+ var pwd = $('#ldap_agent_password').val();
+ var base = $('#ldap_base').val();
if((host && port && base) && ((!agent && !pwd) || (agent && pwd))) {
- $('.ldap_action_continue').removeAttr('disabled');
- $('#ldapSettings').tabs('option', 'disabled', []);
+ LdapWizard.enableTabs();
} else {
- $('.ldap_action_continue').attr('disabled', 'disabled');
- $('#ldapSettings').tabs('option', 'disabled', [1, 2, 3, 4, 5]);
+ LdapWizard.disableTabs();
}
},
blacklistAdd: function(id) {
obj = $('#'+id);
- if(!(obj[0].hasOwnProperty('multiple') && obj[0]['multiple'] == true)) {
+ if(!(obj[0].hasOwnProperty('multiple') && obj[0]['multiple'] === true)) {
//no need to blacklist multiselect
LdapWizard.saveBlacklist[id] = true;
return true;
@@ -244,7 +266,8 @@ var LdapWizard = {
LdapWizard.showInfoBox(t('user_ldap', 'Please specify a Base DN'));
LdapWizard.showInfoBox(t('user_ldap', 'Could not determine Base DN'));
$('#ldap_base').prop('disabled', false);
- }
+ },
+ 'guessBaseDN'
);
}
},
@@ -274,7 +297,8 @@ var LdapWizard = {
LdapWizard.hideSpinner('#ldap_port');
$('#ldap_port').prop('disabled', false);
LdapWizard.showInfoBox(t('user_ldap', 'Please specify the port'));
- }
+ },
+ 'guessPortAndTLS'
);
}
},
@@ -317,27 +341,37 @@ var LdapWizard = {
}
},
- _countThings: function(method) {
+ _countThings: function(method, spinnerID, doneCallback) {
param = 'action='+method+
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
- LdapWizard.ajax(param,
+ LdapWizard.showSpinner(spinnerID);
+ var request = LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
+ LdapWizard.hideSpinner(spinnerID);
+ if(doneCallback !== undefined) {
+ doneCallback(method);
+ }
},
function (result) {
- // error handling
- }
+ OC.Notification.show('Counting the entries failed with, ' + result.message);
+ LdapWizard.hideSpinner(spinnerID);
+ if(doneCallback !== undefined) {
+ doneCallback(method);
+ }
+ },
+ method
);
},
- countGroups: function() {
- LdapWizard._countThings('countGroups');
+ countGroups: function(doneCallback) {
+ LdapWizard._countThings('countGroups', '#ldap_group_count', doneCallback);
},
- countUsers: function() {
- LdapWizard._countThings('countUsers');
+ countUsers: function(doneCallback) {
+ LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback);
},
detectEmailAttribute: function() {
@@ -345,7 +379,7 @@ var LdapWizard = {
'&ldap_serverconfig_chooser='+
encodeURIComponent($('#ldap_serverconfig_chooser').val());
//runs in the background, no callbacks necessary
- LdapWizard.ajax(param, LdapWizard.applyChanges, function(){});
+ LdapWizard.ajax(param, LdapWizard.applyChanges, function(){}, 'detectEmailAttribute');
},
detectGroupMemberAssoc: function() {
@@ -359,7 +393,8 @@ var LdapWizard = {
},
function (result) {
// error handling
- }
+ },
+ 'determineGroupMemberAssoc'
);
},
@@ -372,7 +407,7 @@ var LdapWizard = {
LdapWizard.ajax(param,
function(result) {
$('#ldap_loginfilter_attributes').find('option').remove();
- for (i in result.options['ldap_loginfilter_attributes']) {
+ for (var i in result.options['ldap_loginfilter_attributes']) {
//FIXME: move HTML into template
attr = result.options['ldap_loginfilter_attributes'][i];
$('#ldap_loginfilter_attributes').append(
@@ -392,12 +427,13 @@ var LdapWizard = {
{noneSelectedText : 'No attributes found'});
$('#ldap_loginfilter_attributes').multiselect('disable');
LdapWizard.hideSpinner('#ldap_loginfilter_attributes');
- }
+ },
+ 'determineAttributes'
);
},
findAvailableGroups: function(multisel, type) {
- if(type != 'Users' && type != 'Groups') {
+ if(type !== 'Users' && type !== 'Groups') {
return false;
}
param = 'action=determineGroupsFor'+encodeURIComponent(type)+
@@ -408,7 +444,7 @@ var LdapWizard = {
LdapWizard.ajax(param,
function(result) {
$('#'+multisel).find('option').remove();
- for (i in result.options[multisel]) {
+ for (var i in result.options[multisel]) {
//FIXME: move HTML into template
objc = result.options[multisel][i];
$('#'+multisel).append("<option value='"+objc+"'>"+objc+"</option>");
@@ -435,16 +471,17 @@ var LdapWizard = {
function (result) {
LdapWizard.hideSpinner('#'+multisel);
$('#'+multisel).multiselect('disable');
- if(type == 'Users') {
+ if(type === 'Users') {
LdapWizard.userFilterAvailableGroupsHasRun = true;
LdapWizard.postInitUserFilter();
}
- }
+ },
+ 'findAvailableGroupsFor' + type
);
},
findObjectClasses: function(multisel, type) {
- if(type != 'User' && type != 'Group') {
+ if(type !== 'User' && type !== 'Group') {
return false;
}
param = 'action=determine'+encodeURIComponent(type)+'ObjectClasses'+
@@ -455,7 +492,7 @@ var LdapWizard = {
LdapWizard.ajax(param,
function(result) {
$('#'+multisel).find('option').remove();
- for (i in result.options[multisel]) {
+ for (var i in result.options[multisel]) {
//FIXME: move HTML into template
objc = result.options[multisel][i];
$('#'+multisel).append("<option value='"+objc+"'>"+objc+"</option>");
@@ -476,12 +513,13 @@ var LdapWizard = {
},
function (result) {
LdapWizard.hideSpinner('#'+multisel);
- if(type == 'User') {
+ if(type === 'User') {
LdapWizard.userFilterObjectClassesHasRun = true;
LdapWizard.postInitUserFilter();
}
//TODO: error handling
- }
+ },
+ 'determine' + type + 'ObjectClasses'
);
},
@@ -530,23 +568,21 @@ var LdapWizard = {
isConfigurationActiveControlLocked: true,
init: function() {
+ LdapWizard.instantiateFilters();
+ LdapWizard.admin.setExperienced($('#ldap_experienced_admin').is(':checked'));
LdapWizard.basicStatusCheck();
LdapWizard.functionalityCheck();
LdapWizard.isConfigurationActiveControlLocked = false;
},
initGroupFilter: function() {
- LdapWizard.groupFilter = new LdapFilter('Group');
- LdapWizard.findObjectClasses('ldap_groupfilter_objectclass', 'Group');
- LdapWizard.findAvailableGroups('ldap_groupfilter_groups', 'Groups');
- LdapWizard.countGroups();
+ LdapWizard.groupFilter.activate();
},
/** init login filter tab section **/
initLoginFilter: function() {
- LdapWizard.loginFilter = new LdapFilter('Login');
- LdapWizard.findAttributes();
+ LdapWizard.loginFilter.activate();
},
postInitLoginFilter: function() {
@@ -569,30 +605,80 @@ var LdapWizard = {
});
},
+ hideTestSpinner:function (countMethod) {
+ var selector;
+ if(countMethod === 'countUsers') {
+ selector = '#rawUserFilterContainer .ldapGetEntryCount';
+ } else {
+ selector = '#rawGroupFilterContainer .ldapGetEntryCount';
+ }
+ LdapWizard.hideSpinner(selector);
+ },
+
/** init user filter tab section **/
+ instantiateFilters: function() {
+ delete LdapWizard.userFilter;
+ LdapWizard.userFilter = new LdapFilter('User', function(mode) {
+ if(mode === LdapWizard.filterModeAssisted) {
+ LdapWizard.groupFilter.updateCount();
+ }
+ LdapWizard.userFilter.findFeatures();
+ });
+ $('#rawUserFilterContainer .ldapGetEntryCount').click(function(event) {
+ event.preventDefault();
+ $('#ldap_user_count').text('');
+ LdapWizard.showSpinner('#rawUserFilterContainer .ldapGetEntryCount');
+ LdapWizard.userFilter.updateCount(LdapWizard.hideTestSpinner);
+ LdapWizard.detectEmailAttribute();
+ $('#ldap_user_count').removeClass('hidden');
+ });
+
+ delete LdapWizard.loginFilter;
+ LdapWizard.loginFilter = new LdapFilter('Login', function(mode) {
+ LdapWizard.loginFilter.findFeatures();
+ });
+
+ delete LdapWizard.groupFilter;
+ LdapWizard.groupFilter = new LdapFilter('Group', function(mode) {
+ if(mode === LdapWizard.filterModeAssisted) {
+ LdapWizard.groupFilter.updateCount();
+ }
+ LdapWizard.groupFilter.findFeatures();
+ });
+ $('#rawGroupFilterContainer .ldapGetEntryCount').click(function(event) {
+ event.preventDefault();
+ $('#ldap_group_count').text('');
+ LdapWizard.showSpinner('#rawGroupFilterContainer .ldapGetEntryCount');
+ LdapWizard.groupFilter.updateCount(LdapWizard.hideTestSpinner);
+ LdapWizard.detectGroupMemberAssoc();
+ $('#ldap_group_count').removeClass('hidden');
+ });
+ },
+
userFilterObjectClassesHasRun: false,
userFilterAvailableGroupsHasRun: false,
initUserFilter: function() {
LdapWizard.userFilterObjectClassesHasRun = false;
LdapWizard.userFilterAvailableGroupsHasRun = false;
- LdapWizard.userFilter = new LdapFilter('User');
- LdapWizard.findObjectClasses('ldap_userfilter_objectclass', 'User');
- LdapWizard.findAvailableGroups('ldap_userfilter_groups', 'Users');
+ LdapWizard.userFilter.activate();
},
postInitUserFilter: function() {
if(LdapWizard.userFilterObjectClassesHasRun &&
LdapWizard.userFilterAvailableGroupsHasRun) {
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
- LdapWizard.countUsers();
}
},
/** end of init user filter tab section **/
onTabChange: function(event, ui) {
+ if(LdapWizard.saveProcesses > 0) {
+ //do not allow to switch tabs as long as a save process is active
+ return false;
+ }
newTabIndex = 0;
if(ui.newTab[0].id === '#ldapWizard2') {
LdapWizard.initUserFilter();
@@ -614,10 +700,10 @@ var LdapWizard = {
processChanges: function(triggerObj) {
LdapWizard.hideInfoBox();
- if(triggerObj.id == 'ldap_host'
- || triggerObj.id == 'ldap_port'
- || triggerObj.id == 'ldap_dn'
- || triggerObj.id == 'ldap_agent_password') {
+ if(triggerObj.id === 'ldap_host'
+ || triggerObj.id === 'ldap_port'
+ || triggerObj.id === 'ldap_dn'
+ || triggerObj.id === 'ldap_agent_password') {
LdapWizard.checkPort();
if($('#ldap_port').val()) {
//if Port is already set, check BaseDN
@@ -625,16 +711,14 @@ var LdapWizard = {
}
}
- if(triggerObj.id == 'ldap_userlist_filter') {
- LdapWizard.countUsers();
+ if(triggerObj.id === 'ldap_userlist_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.detectEmailAttribute();
- } else if(triggerObj.id == 'ldap_group_filter') {
- LdapWizard.countGroups();
+ } else if(triggerObj.id === 'ldap_group_filter' && !LdapWizard.admin.isExperienced()) {
LdapWizard.detectGroupMemberAssoc();
}
- if(triggerObj.id == 'ldap_loginfilter_username'
- || triggerObj.id == 'ldap_loginfilter_email') {
+ if(triggerObj.id === 'ldap_loginfilter_username'
+ || triggerObj.id === 'ldap_loginfilter_email') {
LdapWizard.loginFilter.compose();
}
@@ -663,8 +747,8 @@ var LdapWizard = {
values = values + "\n" + resultObj[i].value;
}
LdapWizard._save($('#'+originalObj)[0], $.trim(values));
- if(originalObj == 'ldap_userfilter_objectclass'
- || originalObj == 'ldap_userfilter_groups') {
+ if(originalObj === 'ldap_userfilter_objectclass'
+ || originalObj === 'ldap_userfilter_groups') {
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
//when user filter is changed afterwards, login filter needs to
//be adjusted, too
@@ -672,15 +756,19 @@ var LdapWizard = {
LdapWizard.initLoginFilter();
}
LdapWizard.loginFilter.compose();
- } else if(originalObj == 'ldap_loginfilter_attributes') {
+ } else if(originalObj === 'ldap_loginfilter_attributes') {
LdapWizard.loginFilter.compose();
- } else if(originalObj == 'ldap_groupfilter_objectclass'
- || originalObj == 'ldap_groupfilter_groups') {
+ } else if(originalObj === 'ldap_groupfilter_objectclass'
+ || originalObj === 'ldap_groupfilter_groups') {
LdapWizard.groupFilter.compose();
}
},
+ saveProcesses: 0,
_save: function(object, value) {
+ $('#ldap .ldap_saving').removeClass('hidden');
+ LdapWizard.saveProcesses += 1;
+ $('#ldap *').addClass('save-cursor');
param = 'cfgkey='+encodeURIComponent(object.id)+
'&cfgval='+encodeURIComponent(value)+
'&action=save'+
@@ -690,10 +778,15 @@ var LdapWizard = {
OC.filePath('user_ldap','ajax','wizard.php'),
param,
function(result) {
- if(result.status == 'success') {
+ LdapWizard.saveProcesses -= 1;
+ if(LdapWizard.saveProcesses === 0) {
+ $('#ldap .ldap_saving').addClass('hidden');
+ $('#ldap *').removeClass('save-cursor');
+ }
+ if(result.status === 'success') {
LdapWizard.processChanges(object);
} else {
-// alert('Oooooooooooh :(');
+ console.log('Could not save value for ' + object.id);
}
}
);
@@ -713,12 +806,15 @@ var LdapWizard = {
},
toggleRawFilter: function(container, moc, mg, stateVar, modeKey) {
+ var isUser = moc.indexOf('user') >= 0;
+ var filter = isUser ? LdapWizard.userFilter : LdapWizard.groupFilter;
//moc = multiselect objectclass
//mg = mutliselect groups
if($(container).hasClass('invisible')) {
+ filter.setMode(LdapWizard.filterModeRaw);
$(container).removeClass('invisible');
$(moc).multiselect('disable');
- if($(mg).multiselect().attr('disabled') == 'disabled') {
+ if($(mg).multiselect().attr('disabled') === 'disabled') {
LdapWizard[stateVar] = 'disable';
} else {
LdapWizard[stateVar] = 'enable';
@@ -726,11 +822,13 @@ var LdapWizard = {
$(mg).multiselect('disable');
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeRaw);
} else {
+ filter.setMode(LdapWizard.filterModeAssisted);
+ filter.findFeatures();
$(container).addClass('invisible');
$(mg).multiselect(LdapWizard[stateVar]);
$(moc).multiselect('enable');
LdapWizard._save({ id: modeKey }, LdapWizard.filterModeAssisted);
- if(moc.indexOf('user') >= 0) {
+ if(isUser) {
LdapWizard.blacklistRemove('ldap_userlist_filter');
LdapWizard.userFilter.compose(LdapWizard.detectEmailAttribute);
} else {
@@ -740,47 +838,90 @@ var LdapWizard = {
}
},
+ onToggleRawFilterConfirmation: function(currentMode, callback) {
+ if(!LdapWizard.admin.isExperienced()
+ || currentMode === LdapWizard.filterModeAssisted
+ ) {
+ return callback(true);
+ }
+
+ var confirmed = OCdialogs.confirm(
+ 'Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?',
+ 'Mode switch',
+ callback
+ );
+ },
+
toggleRawGroupFilter: function() {
- LdapWizard.blacklistRemove('ldap_group_filter');
- LdapWizard.toggleRawFilter('#rawGroupFilterContainer',
- '#ldap_groupfilter_objectclass',
- '#ldap_groupfilter_groups',
- 'groupFilterGroupSelectState',
- 'ldapGroupFilterMode'
- );
+ LdapWizard.onToggleRawFilterConfirmation(
+ LdapWizard.groupFilter.getMode(),
+ function(confirmed) {
+ if(confirmed !== true) {
+ return;
+ }
+
+ LdapWizard.blacklistRemove('ldap_group_filter');
+ LdapWizard.toggleRawFilter('#rawGroupFilterContainer',
+ '#ldap_groupfilter_objectclass',
+ '#ldap_groupfilter_groups',
+ 'groupFilterGroupSelectState',
+ 'ldapGroupFilterMode'
+ );
+ LdapWizard.admin.updateGroupTab(LdapWizard.groupFilter.getMode());
+ }
+ );
},
toggleRawLoginFilter: function() {
- LdapWizard.blacklistRemove('ldap_login_filter');
- container = '#rawLoginFilterContainer';
- if($(container).hasClass('invisible')) {
- $(container).removeClass('invisible');
- action = 'disable';
- property = 'disabled';
- mode = LdapWizard.filterModeRaw;
- } else {
- $(container).addClass('invisible');
- action = 'enable';
- property = false;
- mode = LdapWizard.filterModeAssisted;
- }
- $('#ldap_loginfilter_attributes').multiselect(action);
- $('#ldap_loginfilter_email').prop('disabled', property);
- $('#ldap_loginfilter_username').prop('disabled', property);
- LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
- if(action == 'enable') {
- LdapWizard.loginFilter.compose();
- }
+ LdapWizard.onToggleRawFilterConfirmation(
+ LdapWizard.loginFilter.getMode(),
+ function(confirmed) {
+ if(confirmed !== true) {
+ return;
+ }
+
+ LdapWizard.blacklistRemove('ldap_login_filter');
+ container = '#rawLoginFilterContainer';
+ if($(container).hasClass('invisible')) {
+ $(container).removeClass('invisible');
+ action = 'disable';
+ property = 'disabled';
+ mode = LdapWizard.filterModeRaw;
+ } else {
+ $(container).addClass('invisible');
+ action = 'enable';
+ property = false;
+ mode = LdapWizard.filterModeAssisted;
+ }
+ LdapWizard.loginFilter.setMode(mode);
+ LdapWizard.loginFilter.findFeatures();
+ $('#ldap_loginfilter_attributes').multiselect(action);
+ $('#ldap_loginfilter_email').prop('disabled', property);
+ $('#ldap_loginfilter_username').prop('disabled', property);
+ LdapWizard._save({ id: 'ldapLoginFilterMode' }, mode);
+ if(action === 'enable') {
+ LdapWizard.loginFilter.compose();
+ }
+ }
+ );
},
toggleRawUserFilter: function() {
- LdapWizard.blacklistRemove('ldap_userlist_filter');
- LdapWizard.toggleRawFilter('#rawUserFilterContainer',
- '#ldap_userfilter_objectclass',
- '#ldap_userfilter_groups',
- 'userFilterGroupSelectState',
- 'ldapUserFilterMode'
- );
+ LdapWizard.onToggleRawFilterConfirmation(
+ LdapWizard.userFilter.getMode(),
+ function(confirmed) {
+ if(confirmed === true) {
+ LdapWizard.blacklistRemove('ldap_userlist_filter');
+ LdapWizard.toggleRawFilter('#rawUserFilterContainer',
+ '#ldap_userfilter_objectclass',
+ '#ldap_userfilter_groups',
+ 'userFilterGroupSelectState',
+ 'ldapUserFilterMode'
+ );
+ LdapWizard.admin.updateUserTab(LdapWizard.userFilter.getMode());
+ }
+ }
+ );
},
updateStatusIndicator: function(isComplete) {
@@ -837,6 +978,7 @@ $(document).ready(function() {
LdapWizard.initMultiSelect($('#ldap_groupfilter_objectclass'),
'ldap_groupfilter_objectclass',
t('user_ldap', 'Select object classes'));
+
$('.lwautosave').change(function() { LdapWizard.save(this); });
$('#toggleRawUserFilter').click(LdapWizard.toggleRawUserFilter);
$('#toggleRawGroupFilter').click(LdapWizard.toggleRawGroupFilter);
@@ -931,4 +1073,10 @@ $(document).ready(function() {
LdapConfiguration.refreshConfig();
}
});
+
+ expAdminCB = $('#ldap_experienced_admin');
+ LdapWizard.admin = new ExperiencedAdmin(LdapWizard, expAdminCB.is(':checked'));
+ expAdminCB.change(function() {
+ LdapWizard.admin.setExperienced($(this).is(':checked'));
+ });
});
diff --git a/apps/user_ldap/l10n/ar.php b/apps/user_ldap/l10n/ar.php
index 1b0b1e8d413..e10ada32d55 100644
--- a/apps/user_ldap/l10n/ar.php
+++ b/apps/user_ldap/l10n/ar.php
@@ -1,12 +1,36 @@
<?php
$TRANSLATIONS = array(
+"Failed to clear the mappings." => "فشل مسح الارتباطات (mappings)",
"Failed to delete the server configuration" => "تعذر حذف ملف إعدادات الخادم",
"The configuration is valid and the connection could be established!" => "الإعدادت صحيحة",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "الإعدادات صحيحة، لكن لم ينجح الارتباط. يرجى التأكد من إعدادات الخادم وبيانات التحقق من الدخول.",
+"The configuration is invalid. Please have a look at the logs for further details." => "الإعدادات غير صحيحة. يرجى الاطلاع على سجلات المتابعة للمزيد من التفاصيل.",
+"No action specified" => "لم يتم تحديد الإجراء",
+"No configuration specified" => "لم يتم تحديد الإعدادات.",
+"No data specified" => "لم يتم تحديد البيانات.",
+" Could not set configuration %s" => "تعذر تنفيذ الإعداد %s",
"Deletion failed" => "فشل الحذف",
+"Take over settings from recent server configuration?" => "الحصول على الخصائص من آخر إعدادات في الخادم؟",
+"Keep settings?" => "الاحتفاظ بالخصائص والإعدادات؟",
+"{nthServer}. Server" => "الخادم {nthServer}.",
+"Cannot add server configuration" => "تعذر إضافة الإعدادات للخادم.",
+"mappings cleared" => "تم مسح الارتباطات (mappings)",
"Success" => "نجاح",
"Error" => "خطأ",
+"Please specify a Base DN" => "يرجى تحديد اسم نطاق أساسي Base DN",
+"Could not determine Base DN" => "تعذر التحقق من اسم النطاق الأساسي Base DN",
+"Please specify the port" => "يرجى تحديد المنفذ",
+"Configuration OK" => "الإعدادات صحيحة",
+"Configuration incorrect" => "الإعدادات غير صحيحة",
+"Configuration incomplete" => "الإعدادات غير مكتملة",
"Select groups" => "إختر مجموعة",
-"_%s group found_::_%s groups found_" => array("","","","","",""),
+"Select object classes" => "اختر أصناف المكونات",
+"Select attributes" => "اختر الخصائص",
+"Connection test succeeded" => "تم اختبار الاتصال بنجاح",
+"Connection test failed" => "فشل اختبار الاتصال",
+"Do you really want to delete the current Server Configuration?" => "هل ترغب فعلاً في حذف إعدادات الخادم الحالي؟",
+"Confirm Deletion" => "تأكيد الحذف",
+"_%s group found_::_%s groups found_" => array("لا توجد مجموعات: %s","تم إيجاد %s مجموعة واحدة","تم إيجاد %s مجموعتين","تم إيجاد %s مجموعات","تم إيجاد %s مجموعة","تم إيجاد %s مجموعة/مجموعات"),
"_%s user found_::_%s users found_" => array("","","","","",""),
"Save" => "حفظ",
"Help" => "المساعدة",
diff --git a/apps/user_ldap/l10n/bg_BG.php b/apps/user_ldap/l10n/bg_BG.php
index dfd9db5438b..9873a7d1f5c 100644
--- a/apps/user_ldap/l10n/bg_BG.php
+++ b/apps/user_ldap/l10n/bg_BG.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Промени raw филтъра",
"Raw LDAP filter" => "Raw LDAP филтър",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Филтърът посочва кои LDAP групи ще имат достъп до %s инсталацията.",
+"Test Filter" => "Тестов Филтър",
"groups found" => "открити групи",
"Users login with this attribute:" => "Потребителски профили с този атрибут:",
"LDAP Username:" => "LDAP Потребителско Име:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "За анонимен достъп, остави DN и Парола празни.",
"One Base DN per line" => "По един Base DN на ред",
"You can specify Base DN for users and groups in the Advanced tab" => "Можеш да настроиш Base DN за отделни потребители и групи в разделителя Допълнителни.",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Избягва автоматични LDAP заявки. По-добра опция за големи инсталации, но изисква LDAP познания.",
+"Manually enter LDAP filters (recommended for large directories)" => "Ръчно въвеждана на LDAP филтри(препоръчано за по-големи папки)",
"Limit %s access to users meeting these criteria:" => "Ограничи достъпа на %s до потребители покриващи следните критерии:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Филтърът посочва кои LDAP потребители ще имат достъп до %s инсталацията.",
"users found" => "открити потребители",
+"Saving" => "Записване",
"Back" => "Назад",
"Continue" => "Продължи",
"Expert" => "Експерт",
diff --git a/apps/user_ldap/l10n/cs_CZ.php b/apps/user_ldap/l10n/cs_CZ.php
index e3b76799fb1..03e3ac578c3 100644
--- a/apps/user_ldap/l10n/cs_CZ.php
+++ b/apps/user_ldap/l10n/cs_CZ.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Edituj filtr přímo",
"Raw LDAP filter" => "Původní filtr LDAP",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.",
+"Test Filter" => "Otestovat filtr",
"groups found" => "nalezené skupiny",
"Users login with this attribute:" => "Uživatelé se přihlašují s tímto atributem:",
"LDAP Username:" => "LDAP uživatelské jméno:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Pro anonymní přístup ponechte údaje DN and heslo prázdné.",
"One Base DN per line" => "Jedna základní DN na řádku",
"You can specify Base DN for users and groups in the Advanced tab" => "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Ručně vložit LDAP filtry (doporučené pro obsáhlé adresáře)",
"Limit %s access to users meeting these criteria:" => "Omezit přístup %s uživatelům splňujícím tyto podmínky:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.",
"users found" => "nalezení uživatelé",
+"Saving" => "Ukládá se",
"Back" => "Zpět",
"Continue" => "Pokračovat",
"Expert" => "Expertní",
diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php
index 31dbd08d1b3..d76395ab3ba 100644
--- a/apps/user_ldap/l10n/da.php
+++ b/apps/user_ldap/l10n/da.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Redigér det rå filter i stedet",
"Raw LDAP filter" => "Råt LDAP-filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Filteret angiver hvilke LDAP-grupper, der skal have adgang til instansen %s.",
+"Test Filter" => "Testfilter",
"groups found" => "grupper blev fundet",
"Users login with this attribute:" => "Brugeres login med dette attribut:",
"LDAP Username:" => "LDAP-brugernavn:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "For anonym adgang, skal du lade DN og Adgangskode tomme.",
"One Base DN per line" => "Ét Base DN per linje",
"You can specify Base DN for users and groups in the Advanced tab" => "You can specify Base DN for users and groups in the Advanced tab",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Undgår automatiske LDAP-forespørgsler. Bedre på større opsætninger, men kræver en del LDAP-kendskab.",
+"Manually enter LDAP filters (recommended for large directories)" => "Angiv LDAP-filtre manuelt (anbefales til større kataloger)",
"Limit %s access to users meeting these criteria:" => "Begræns %s-adgangen til brugere som imødekommer disse kriterier:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Filteret angiver hvilke LDAP-brugere, der skal have adgang til %s-instansen.",
"users found" => "brugere blev fundet",
+"Saving" => "Gemmer",
"Back" => "Tilbage",
"Continue" => "Videre",
"Expert" => "Ekspert",
diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php
index fec908a8d48..e2915b85425 100644
--- a/apps/user_ldap/l10n/de.php
+++ b/apps/user_ldap/l10n/de.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Original-Filter stattdessen bearbeiten",
"Raw LDAP filter" => "Original LDAP-Filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Der Filter definiert welche LDAP-Gruppen Zugriff auf die %s Instanz haben sollen.",
+"Test Filter" => "Test-Filter",
"groups found" => "Gruppen gefunden",
"Users login with this attribute:" => "Nutzeranmeldung mit diesem Merkmal:",
"LDAP Username:" => "LDAP-Benutzername:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Lasse die Felder DN und Passwort für anonymen Zugang leer.",
"One Base DN per line" => "Ein Basis-DN pro Zeile",
"You can specify Base DN for users and groups in the Advanced tab" => "Du kannst Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Verhindert automatische LDAP-Anfragen. Besser für größere Installationen, benötigt aber einiges an LDAP-Wissen.",
+"Manually enter LDAP filters (recommended for large directories)" => "LDAP-Filter manuell eingeben (erforderlich für große Verzeichnisse)",
"Limit %s access to users meeting these criteria:" => "Beschränken Sie den %s Zugriff auf die Benutzer-Sitzungen durch folgende Kriterien:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Der Filter definiert welche LDAP-Benutzer Zugriff auf die %s Instanz haben sollen.",
"users found" => "Benutzer gefunden",
+"Saving" => "Speichern",
"Back" => "Zurück",
"Continue" => "Fortsetzen",
"Expert" => "Experte",
diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php
index 118f482014f..ed1755d54a0 100644
--- a/apps/user_ldap/l10n/de_DE.php
+++ b/apps/user_ldap/l10n/de_DE.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Original-Filter stattdessen bearbeiten",
"Raw LDAP filter" => "Original LDAP-Filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Der Filter definiert welche LDAP-Gruppen Zugriff auf die %s Instanz haben sollen.",
+"Test Filter" => "Test-Filter",
"groups found" => "Gruppen gefunden",
"Users login with this attribute:" => "Nutzeranmeldung mit diesem Merkmal:",
"LDAP Username:" => "LDAP-Benutzername:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Lassen Sie die Felder DN und Passwort für einen anonymen Zugang leer.",
"One Base DN per line" => "Ein Basis-DN pro Zeile",
"You can specify Base DN for users and groups in the Advanced tab" => "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Verhindert automatische LDAP-Anfragen. Besser für größere Installationen, benötigt aber einiges an LDAP-Wissen.",
+"Manually enter LDAP filters (recommended for large directories)" => "LDAP-Filter manuell eingeben (erforderlich für große Verzeichnisse)",
"Limit %s access to users meeting these criteria:" => "Beschränken Sie den %s Zugriff auf die Benutzer-Sitzungen durch folgende Kriterien:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Der Filter definiert welche LDAP-Benutzer Zugriff auf die %s Instanz haben sollen.",
"users found" => "Benutzer gefunden",
+"Saving" => "Speichern",
"Back" => "Zurück",
"Continue" => "Fortsetzen",
"Expert" => "Experte",
diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php
index c2f854ceb31..0022c367dd5 100644
--- a/apps/user_ldap/l10n/el.php
+++ b/apps/user_ldap/l10n/el.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Επεξεργασία πρωτογενούς φίλτρου αντί αυτού",
"Raw LDAP filter" => "Πρωτογενές φίλτρο ",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Το φίλτρο καθορίζει ποιες ομάδες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.",
+"Test Filter" => "Φίλτρο Ελέγχου",
"groups found" => "ομάδες βρέθηκαν",
"Users login with this attribute:" => "Οι χρήστες εισέρχονται με αυτό το χαρακτηριστικό:",
"LDAP Username:" => "Όνομα χρήστη LDAP:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Για ανώνυμη πρόσβαση, αφήστε κενά τα πεδία DN και Pasword.",
"One Base DN per line" => "Ένα DN Βάσης ανά γραμμή ",
"You can specify Base DN for users and groups in the Advanced tab" => "Μπορείτε να καθορίσετε το Base DN για χρήστες και ομάδες από την καρτέλα Προηγμένες ρυθμίσεις",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Αποφυγή αυτόματων αιτημάτων LDAP. Προτιμότερο για μεγαλύτερες εγκαταστάσεις, αλλά απαιτεί κάποιες γνώσεις LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Εισάγετε με μη αυτόματο τρόπο φίλτρα LDAP (προτείνεται για μεγάλους καταλόγους)",
"Limit %s access to users meeting these criteria:" => "Περιορισμός της πρόσβασης %s σε χρήστες που πληρούν τα κριτήρια:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Το φίλτρο καθορίζει ποιοι χρήστες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.",
"users found" => "χρήστες βρέθηκαν",
+"Saving" => "Αποθήκευση",
"Back" => "Επιστροφή",
"Continue" => "Συνέχεια",
"Expert" => "Ειδικός",
diff --git a/apps/user_ldap/l10n/en_GB.php b/apps/user_ldap/l10n/en_GB.php
index cde3795bb6f..35a0e8d3ef9 100644
--- a/apps/user_ldap/l10n/en_GB.php
+++ b/apps/user_ldap/l10n/en_GB.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Edit raw filter instead",
"Raw LDAP filter" => "Raw LDAP filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "The filter specifies which LDAP groups shall have access to the %s instance.",
+"Test Filter" => "Test Filter",
"groups found" => "groups found",
"Users login with this attribute:" => "Users login with this attribute:",
"LDAP Username:" => "LDAP Username:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "For anonymous access, leave DN and Password empty.",
"One Base DN per line" => "One Base DN per line",
"You can specify Base DN for users and groups in the Advanced tab" => "You can specify Base DN for users and groups in the Advanced tab",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.",
+"Manually enter LDAP filters (recommended for large directories)" => "Manually enter LDAP filters (recommended for large directories)",
"Limit %s access to users meeting these criteria:" => "Limit %s access to users meeting these criteria:",
"The filter specifies which LDAP users shall have access to the %s instance." => "The filter specifies which LDAP users shall have access to the %s instance.",
"users found" => "users found",
+"Saving" => "Saving",
"Back" => "Back",
"Continue" => "Continue",
"Expert" => "Expert",
diff --git a/apps/user_ldap/l10n/es.php b/apps/user_ldap/l10n/es.php
index f58efd3a4d9..f85c1a67283 100644
--- a/apps/user_ldap/l10n/es.php
+++ b/apps/user_ldap/l10n/es.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Editar el filtro en bruto en su lugar",
"Raw LDAP filter" => "Filtro LDAP en bruto",
"The filter specifies which LDAP groups shall have access to the %s instance." => "El filtro especifica que grupos LDAP tendrán acceso a %s.",
+"Test Filter" => "Filtro de prueba",
"groups found" => "grupos encontrados",
"Users login with this attribute:" => "Los usuarios inician sesión con este atributo:",
"LDAP Username:" => "Nombre de usuario LDAP:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, deje DN y contraseña 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" => "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Evita peticiones automaticas al LDAP. Mejor para grandes configuraciones, pero requiere algun conocimiento de LDAP",
+"Manually enter LDAP filters (recommended for large directories)" => "Ingrese manualmente los filtros LDAP (Recomendado para grandes directorios)",
"Limit %s access to users meeting these criteria:" => "Limitar el acceso a %s a los usuarios que cumplan estos criterios:",
"The filter specifies which LDAP users shall have access to the %s instance." => "El filtro especifica que usuarios LDAP pueden tener acceso a %s.",
"users found" => "usuarios encontrados",
+"Saving" => "Guardando",
"Back" => "Atrás",
"Continue" => "Continuar",
"Expert" => "Experto",
diff --git a/apps/user_ldap/l10n/et_EE.php b/apps/user_ldap/l10n/et_EE.php
index 394bcd19289..feeef699fac 100644
--- a/apps/user_ldap/l10n/et_EE.php
+++ b/apps/user_ldap/l10n/et_EE.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Selle asemel muuda filtrit",
"Raw LDAP filter" => "LDAP filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.",
+"Test Filter" => "Testi filtrit",
"groups found" => "gruppi leitud",
"Users login with this attribute:" => "Logimiseks kasutatkse atribuuti: ",
"LDAP Username:" => "LDAP kasutajanimi:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Anonüümseks ligipääsuks jäta DN ja parool tühjaks.",
"One Base DN per line" => "Üks baas-DN rea kohta",
"You can specify Base DN for users and groups in the Advanced tab" => "Sa saad kasutajate ja gruppide baas DN-i määrata lisavalikute vahekaardilt",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Väldib automaatseid LDAP päringuid, Parem suurematele saitidele, aga nõuab mõningaid teadmisi LDAP kohta.",
+"Manually enter LDAP filters (recommended for large directories)" => "Sisesta LDAP filtrid automaatselt (sooitatav suurtele kataloogidele)",
"Limit %s access to users meeting these criteria:" => "Piira %s liigpääs kriteeriumiga sobivatele kasutajatele:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Filter määrab millised LDAP kasutajad pääsevad ligi %s instantsile.",
"users found" => "kasutajat leitud",
+"Saving" => "Salvestamine",
"Back" => "Tagasi",
"Continue" => "Jätka",
"Expert" => "Ekspert",
diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php
index 2fedc2a9460..8768c6e989f 100644
--- a/apps/user_ldap/l10n/fi_FI.php
+++ b/apps/user_ldap/l10n/fi_FI.php
@@ -45,6 +45,7 @@ $TRANSLATIONS = array(
"Advanced" => "Lisäasetukset",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Varoitus:</b> PHP:n LDAP-moduulia ei ole asennettu, taustaosa ei toimi. Pyydä järjestelmän ylläpitäjää asentamaan se.",
"Connection Settings" => "Yhteysasetukset",
+"Backup (Replica) Host" => "Varmuuskopioinnin (replikointi) palvelin",
"Backup (Replica) Port" => "Varmuuskopioinnin (replikoinnin) portti",
"Disable Main Server" => "Poista pääpalvelin käytöstä",
"Only connect to the replica server." => "Yhdistä vain replikointipalvelimeen.",
@@ -57,8 +58,12 @@ $TRANSLATIONS = array(
"Group Display Name Field" => "Ryhmän \"näytettävä nimi\"-kenttä",
"Base Group Tree" => "Ryhmien juuri",
"Group-Member association" => "Ryhmän ja jäsenen assosiaatio (yhteys)",
+"Quota Field" => "Kiintiökenttä",
+"Quota Default" => "Oletuskiintiö",
"in bytes" => "tavuissa",
"Email Field" => "Sähköpostikenttä",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Jätä tyhjäksi käyttäjänimi (oletusasetus). Muutoin anna LDAP/AD-atribuutti."
+"User Home Folder Naming Rule" => "Käyttäjän kotihakemiston nimeämissääntö",
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Jätä tyhjäksi käyttäjänimi (oletusasetus). Muutoin anna LDAP/AD-atribuutti.",
+"Internal Username" => "Sisäinen käyttäjänimi"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/user_ldap/l10n/fr.php b/apps/user_ldap/l10n/fr.php
index 7083cbb2906..0108c0e54bc 100644
--- a/apps/user_ldap/l10n/fr.php
+++ b/apps/user_ldap/l10n/fr.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Éditer le filtre raw à la place",
"Raw LDAP filter" => "Filtre Raw LDAP",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Le filtre spécifie quels groupes LDAP doivent avoir accès à l'instance %s.",
+"Test Filter" => "Test du filtre",
"groups found" => "groupes trouvés",
"Users login with this attribute:" => "Utilisateurs se connectant avec cet attribut :",
"LDAP Username:" => "Nom d'utilisateur LDAP :",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Pour un accès anonyme, laisser le DN utilisateur et le mot de passe vides.",
"One Base DN per line" => "Un DN racine par ligne",
"You can specify Base DN for users and groups in the Advanced tab" => "Vous pouvez spécifier les DN Racines de vos utilisateurs et groupes via l'onglet Avancé",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Évite les requêtes LDAP automatiques. Mieux pour les installations de grande ampleur, mais demande des connaissances en LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Entrée manuelle des filtres LDAP (recommandé pour les annuaires de grande ampleur)",
"Limit %s access to users meeting these criteria:" => "Limiter l'accès à %s aux utilisateurs respectant ces critères :",
"The filter specifies which LDAP users shall have access to the %s instance." => "Le filtre spécifie quels utilisateurs LDAP doivent avoir accès à l'instance %s.",
"users found" => "utilisateurs trouvés",
+"Saving" => "Enregistrement...",
"Back" => "Retour",
"Continue" => "Poursuivre",
"Expert" => "Expert",
diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php
index af7100da1a9..fb1f1f9cdcf 100644
--- a/apps/user_ldap/l10n/hu_HU.php
+++ b/apps/user_ldap/l10n/hu_HU.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Inkább közvetlenül megadom a szűrési kifejezést:",
"Raw LDAP filter" => "Az LDAP szűrőkifejezés",
"The filter specifies which LDAP groups shall have access to the %s instance." => "A szűrő meghatározza, hogy mely LDAP csoportok lesznek jogosultak %s elérésére.",
+"Test Filter" => "Test szűrő ",
"groups found" => "csoport van",
"Users login with this attribute:" => "A felhasználók ezzel az attribútummal jelentkeznek be:",
"LDAP Username:" => "LDAP felhasználónév:",
@@ -66,9 +67,11 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Bejelentkezés nélküli eléréshez ne töltse ki a DN és Jelszó mezőket!",
"One Base DN per line" => "Soronként egy DN-gyökér",
"You can specify Base DN for users and groups in the Advanced tab" => "A Haladó fülre kattintva külön DN-gyökér állítható be a felhasználók és a csoportok számára",
+"Manually enter LDAP filters (recommended for large directories)" => "LDAP szűrők kézi beállitása (ajánlott a nagy könyvtáraknál)",
"Limit %s access to users meeting these criteria:" => "Korlátozzuk a %s szolgáltatás elérését azokra a felhasználókra, akik megfelelnek a következő feltételeknek:",
"The filter specifies which LDAP users shall have access to the %s instance." => "A szűrő meghatározza, hogy mely LDAP felhasználók lesznek jogosultak %s elérésére.",
"users found" => "felhasználó van",
+"Saving" => "Mentés",
"Back" => "Vissza",
"Continue" => "Folytatás",
"Expert" => "Profi",
diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php
index b6e581952fa..01cf269d68d 100644
--- a/apps/user_ldap/l10n/id.php
+++ b/apps/user_ldap/l10n/id.php
@@ -1,37 +1,77 @@
<?php
$TRANSLATIONS = array(
+"Failed to clear the mappings." => "Gagal membersihkan pemetaan.",
"Failed to delete the server configuration" => "Gagal menghapus konfigurasi server",
"The configuration is valid and the connection could be established!" => "Konfigurasi valid dan koneksi dapat dilakukan!",
-"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurasi valid, tetapi Bind gagal. Silakan cek pengaturan server dan keamanan.",
+"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Konfigurasi valid, tetapi Bind gagal. Silakan periksa pengaturan server dan kredensial.",
+"The configuration is invalid. Please have a look at the logs for further details." => "Konfigurasi tidak sah. Silakan lihat log untuk rincian lebh lanjut.",
+"No action specified" => "Tidak ada tindakan yang ditetapkan",
+"No configuration specified" => "Tidak ada konfigurasi yang ditetapkan",
+"No data specified" => "Tidak ada data yang ditetapkan",
+" Could not set configuration %s" => "Tidak dapat menyetel konfigurasi %s",
"Deletion failed" => "Penghapusan gagal",
-"Take over settings from recent server configuration?" => "Ambil alih pengaturan dari konfigurasi server saat ini?",
+"Take over settings from recent server configuration?" => "Mengambil alih pengaturan dari konfigurasi server saat ini?",
"Keep settings?" => "Biarkan pengaturan?",
+"{nthServer}. Server" => "{nthServer}. Server",
"Cannot add server configuration" => "Gagal menambah konfigurasi server",
-"Success" => "Sukses",
-"Error" => "Galat",
+"mappings cleared" => "pemetaan dibersihkan",
+"Success" => "Berhasil",
+"Error" => "Kesalahan",
+"Please specify a Base DN" => "Sialakan menetapkan Base DN",
+"Could not determine Base DN" => "Tidak dapat menetakan Base DN",
+"Please specify the port" => "Silakan tetapkan port",
+"Configuration OK" => "Konfigurasi Oke",
+"Configuration incorrect" => "Konfigurasi salah",
+"Configuration incomplete" => "Konfigurasi tidak lengkap",
"Select groups" => "Pilih grup",
-"Connection test succeeded" => "Tes koneksi sukses",
-"Connection test failed" => "Tes koneksi gagal",
-"Do you really want to delete the current Server Configuration?" => "Anda ingin menghapus Konfigurasi Server saat ini?",
+"Select object classes" => "Pilik kelas obyek",
+"Select attributes" => "Pilih atribut",
+"Connection test succeeded" => "Pemeriksaan koneksi berhasil",
+"Connection test failed" => "Pemeriksaan koneksi gagal",
+"Do you really want to delete the current Server Configuration?" => "Apakan Anda ingin menghapus Konfigurasi Server saat ini?",
"Confirm Deletion" => "Konfirmasi Penghapusan",
-"_%s group found_::_%s groups found_" => array(""),
-"_%s user found_::_%s users found_" => array(""),
-"Group Filter" => "saringan grup",
+"_%s group found_::_%s groups found_" => array("%s grup ditemukan"),
+"_%s user found_::_%s users found_" => array("%s pengguna ditemukan"),
+"Could not find the desired feature" => "Tidak dapat menemukan fitur yang diinginkan",
+"Invalid Host" => "Host tidak sah",
+"Server" => "Server",
+"User Filter" => "Penyaring Pengguna",
+"Login Filter" => "Penyaring Masuk",
+"Group Filter" => "Penyaring grup",
"Save" => "Simpan",
"Test Configuration" => "Uji Konfigurasi",
"Help" => "Bantuan",
+"Groups meeting these criteria are available in %s:" => "Grup memenuhi kriteria ini tersedia di %s:",
+"only those object classes:" => "hanya kelas objek:",
+"only from those groups:" => "hanya dari kelompok:",
+"Edit raw filter instead" => "Sunting penyaring raw",
+"Raw LDAP filter" => "Penyaring LDAP raw",
+"Test Filter" => "Uji Penyaring",
+"groups found" => "grup ditemukan",
+"Users login with this attribute:" => "Login pengguna dengan atribut ini:",
+"LDAP Username:" => "Nama pengguna LDAP:",
+"LDAP Email Address:" => "Alamat Email LDAP:",
+"Other Attributes:" => "Atribut Lain:",
+"1. Server" => "1. Server",
+"%s. Server:" => "%s. Server:",
"Add Server Configuration" => "Tambah Konfigurasi Server",
+"Delete Configuration" => "Hapus Konfigurasi",
"Host" => "Host",
-"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol dapat tidak ditulis, kecuali anda menggunakan SSL. Lalu jalankan dengan ldaps://",
-"Port" => "port",
-"User DN" => "User DN",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol dapat tidak ditulis, kecuali Anda menggunakan SSL. Lalu jalankan dengan ldaps://",
+"Port" => "Port",
+"User DN" => "Pengguna DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN dari klien pengguna yang dengannya tautan akan diterapkan, mis. uid=agen,dc=contoh,dc=com. Untuk akses anonim, biarkan DN dan kata sandi kosong.",
"Password" => "Sandi",
"For anonymous access, leave DN and Password empty." => "Untuk akses anonim, biarkan DN dan Kata sandi kosong.",
"One Base DN per line" => "Satu Base DN per baris",
"You can specify Base DN for users and groups in the Advanced tab" => "Anda dapat menetapkan Base DN untuk pengguna dan grup dalam tab Lanjutan",
+"Manually enter LDAP filters (recommended for large directories)" => "Masukkan penyaring LDAP secara manual (direkomendasikan untuk direktori yang besar)",
+"Limit %s access to users meeting these criteria:" => "Batasi akses %s untuk pengguna yang sesuai dengan kriteria berikut:",
+"users found" => "pengguna ditemukan",
+"Saving" => "Menyimpan",
"Back" => "Kembali",
"Continue" => "Lanjutkan",
+"Expert" => "Lanjutan",
"Advanced" => "Lanjutan",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Peringatan:</b> Modul LDAP PHP tidak terpasang, perangkat tidak akan bekerja. Silakan minta administrator sistem untuk memasangnya.",
"Connection Settings" => "Pengaturan Koneksi",
diff --git a/apps/user_ldap/l10n/it.php b/apps/user_ldap/l10n/it.php
index ef88ea765d8..34e93fd778e 100644
--- a/apps/user_ldap/l10n/it.php
+++ b/apps/user_ldap/l10n/it.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Modifica invece il filtro grezzo",
"Raw LDAP filter" => "Filtro LDAP grezzo",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Il filtro specifica quali gruppi LDAP devono avere accesso all'istanza %s.",
+"Test Filter" => "Prova filtro",
"groups found" => "gruppi trovati",
"Users login with this attribute:" => "Utenti con questo attributo:",
"LDAP Username:" => "Nome utente LDAP:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
"One Base DN per line" => "Un DN base per riga",
"You can specify Base DN for users and groups in the Advanced tab" => "Puoi specificare una DN base per gli utenti ed i gruppi nella scheda Avanzate",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Impedisce le richieste LDAP automatiche. Meglio per installazioni più grandi, ma richiede una certa conoscenza di LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Digita manualmente i filtri LDAP (consigliato per directory grandi)",
"Limit %s access to users meeting these criteria:" => "Limita l'accesso a %s ai gruppi che verificano questi criteri:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Il filtro specifica quali utenti LDAP devono avere accesso all'istanza %s.",
"users found" => "utenti trovati",
+"Saving" => "Salvataggio",
"Back" => "Indietro",
"Continue" => "Continua",
"Expert" => "Esperto",
diff --git a/apps/user_ldap/l10n/ja.php b/apps/user_ldap/l10n/ja.php
index 7b4240c2acf..01430106847 100644
--- a/apps/user_ldap/l10n/ja.php
+++ b/apps/user_ldap/l10n/ja.php
@@ -120,7 +120,7 @@ $TRANSLATIONS = array(
"UUID Attribute for Users:" => "ユーザーのUUID属性:",
"UUID Attribute for Groups:" => "グループの UUID 属性:",
"Username-LDAP User Mapping" => "ユーザー名とLDAPユーザのマッピング",
-"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザは内部ユーザ名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザ名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、全てのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストもしくは実験の段階でのみマッピングのクリアを行なってください。",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザは内部ユーザ名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザ名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストもしくは実験の段階でのみマッピングのクリアを行なってください。",
"Clear Username-LDAP User Mapping" => "ユーザー名とLDAPユーザーのマッピングをクリアする",
"Clear Groupname-LDAP Group Mapping" => "グループ名とLDAPグループのマッピングをクリアする"
);
diff --git a/apps/user_ldap/l10n/ko.php b/apps/user_ldap/l10n/ko.php
index 575d3c8a1ca..21013328dc1 100644
--- a/apps/user_ldap/l10n/ko.php
+++ b/apps/user_ldap/l10n/ko.php
@@ -30,6 +30,9 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("사용자 %s명 찾음"),
"Could not find the desired feature" => "필요한 기능을 찾을 수 없음",
"Invalid Host" => "잘못된 호스트",
+"Server" => "서버",
+"User Filter" => "사용자 필터",
+"Login Filter" => "로그인 필터",
"Group Filter" => "그룹 필터",
"Save" => "저장",
"Test Configuration" => "설정 시험",
diff --git a/apps/user_ldap/l10n/nl.php b/apps/user_ldap/l10n/nl.php
index 5fbdfb39c50..ccf109d4d48 100644
--- a/apps/user_ldap/l10n/nl.php
+++ b/apps/user_ldap/l10n/nl.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Bewerk raw filter",
"Raw LDAP filter" => "Raw LDAP filter",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Dit filter geeft aan welke LDAP groepen toegang hebben tot %s.",
+"Test Filter" => "Testfilter",
"groups found" => "groepen gevonden",
"Users login with this attribute:" => "Gebruikers loggen in met dit attribuut:",
"LDAP Username:" => "LDAP Username:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Voor anonieme toegang, laat de DN en het wachtwoord leeg.",
"One Base DN per line" => "Een Base DN per regel",
"You can specify Base DN for users and groups in the Advanced tab" => "Je kunt het Base DN voor gebruikers en groepen specificeren in het tab Geavanceerd.",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.",
+"Manually enter LDAP filters (recommended for large directories)" => "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)",
"Limit %s access to users meeting these criteria:" => "Beperk %s toegang tot gebruikers die voldoen aan deze criteria:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.",
"users found" => "gebruikers gevonden",
+"Saving" => "Opslaan",
"Back" => "Terug",
"Continue" => "Verder",
"Expert" => "Expert",
diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php
index 6e5a1663e2d..870cc7ebca9 100644
--- a/apps/user_ldap/l10n/pt_BR.php
+++ b/apps/user_ldap/l10n/pt_BR.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Editar filtro raw ao invéz",
"Raw LDAP filter" => "Filtro LDAP Raw",
"The filter specifies which LDAP groups shall have access to the %s instance." => "O filtro especifica quais grupos LDAP devem ter acesso à instância do %s.",
+"Test Filter" => "Filtro Teste",
"groups found" => "grupos encontrados",
"Users login with this attribute:" => "Usuários entrar com este atributo:",
"LDAP Username:" => "Usuário LDAP:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Para acesso anônimo, deixe DN e Senha vazios.",
"One Base DN per line" => "Uma base DN por linha",
"You can specify Base DN for users and groups in the Advanced tab" => "Você pode especificar DN Base para usuários e grupos na guia Avançada",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Evita pedidos LDAP automáticos. Melhor para configurações maiores, mas requer algum conhecimento LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Inserir manualmente filtros LDAP (recomendado para grandes diretórios)",
"Limit %s access to users meeting these criteria:" => "Limitar o acesso %s para usuários que satisfazem esses critérios:",
"The filter specifies which LDAP users shall have access to the %s instance." => "O filtro especifica quais usuários LDAP devem ter acesso à instância do %s.",
"users found" => "usuários encontrados",
+"Saving" => "Salvando",
"Back" => "Voltar",
"Continue" => "Continuar",
"Expert" => "Especialista",
diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php
index fb4836c78b0..5f20348486b 100644
--- a/apps/user_ldap/l10n/pt_PT.php
+++ b/apps/user_ldap/l10n/pt_PT.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Editar filtro raw em vez disso",
"Raw LDAP filter" => "Filtro LDAP Raw",
"The filter specifies which LDAP groups shall have access to the %s instance." => "O filtro especifica quais grupos LDAP devem ter acesso à instância %s.",
+"Test Filter" => "Testar Filtro",
"groups found" => "grupos encontrados",
"Users login with this attribute:" => "Utilizadores entrar com este atributo:",
"LDAP Username:" => "Nome de utilizador LDAP:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Para acesso anónimo, deixe DN e a Palavra-passe vazios.",
"One Base DN per line" => "Uma base DN por linho",
"You can specify Base DN for users and groups in the Advanced tab" => "Pode especificar o ND Base para utilizadores e grupos no separador Avançado",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Evita pedidos LDAP automáticos. Melhor para grandes configurações, mas requer conhecimentos LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Introduzir filtros LDAP manualmente (recomendado para directórios grandes)",
"Limit %s access to users meeting these criteria:" => "Limitar o acesso a %s de utilizadores com estes critérios:",
"The filter specifies which LDAP users shall have access to the %s instance." => "O filtro especifica quais utilizadores do LDAP devem ter acesso à instância %s.",
"users found" => "utilizadores encontrados",
+"Saving" => "Guardando",
"Back" => "Voltar",
"Continue" => "Continuar",
"Expert" => "Perito",
diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php
index 4eb7dfce597..e37caa2fd92 100644
--- a/apps/user_ldap/l10n/sl.php
+++ b/apps/user_ldap/l10n/sl.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Uredi surov filter",
"Raw LDAP filter" => "Surovi filter LDAP",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Filter določa, katere skupine LDAP bodo imele dostop do %s.",
+"Test Filter" => "Preizkusi filter",
"groups found" => "najdenih skupin",
"Users login with this attribute:" => "Uporabniki se prijavijo z atributom:",
"LDAP Username:" => "Uporabniško ime LDAP:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Za brezimni dostop naj bosta polji imena in gesla prazni.",
"One Base DN per line" => "Eno osnovno enolično ime na vrstico",
"You can specify Base DN for users and groups in the Advanced tab" => "Osnovno enolično ime za uporabnike in skupine lahko določite v zavihku naprednih možnosti.",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Preusmeri samodejne zahteve LDAP. Nastavitev je priporočljiva za obsežnejše namestitve, vendar zahteva nekaj znanja o delu z LDAP.",
+"Manually enter LDAP filters (recommended for large directories)" => "Ročno vstavi filtre za LDAP (priporočljivo za obsežnejše mape).",
"Limit %s access to users meeting these criteria:" => "Omeji dostop do %s za uporabnike, ki zadostijo kriterijem:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Filter določa, kateri uporabniki LDAP bodo imeli dostop do %s.",
"users found" => "najdenih uporabnikov",
+"Saving" => "Poteka shranjevanje ...",
"Back" => "Nazaj",
"Continue" => "Nadaljuj",
"Expert" => "Napredno",
diff --git a/apps/user_ldap/l10n/tr.php b/apps/user_ldap/l10n/tr.php
index 4a10b141dbc..3527870032b 100644
--- a/apps/user_ldap/l10n/tr.php
+++ b/apps/user_ldap/l10n/tr.php
@@ -47,6 +47,7 @@ $TRANSLATIONS = array(
"Edit raw filter instead" => "Bunun yerine ham filtreyi düzenle",
"Raw LDAP filter" => "Ham LDAP filtresi",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Filtre, %s örneğine erişmesi gereken LDAP gruplarını belirtir.",
+"Test Filter" => "Filtreyi Test Et",
"groups found" => "grup bulundu",
"Users login with this attribute:" => "Kullanıcılar şu öznitelikle oturum açarlar:",
"LDAP Username:" => "LDAP Kullanıcı Adı:",
@@ -66,9 +67,12 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Anonim erişim için DN ve Parola alanlarını boş bırakın.",
"One Base DN per line" => "Her satırda tek bir Base DN",
"You can specify Base DN for users and groups in the Advanced tab" => "Gelişmiş sekmesinde, kullanıcılar ve gruplar için Base DN belirtebilirsiniz",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Otomatik LDAP isteklerinden kaçın. Büyük kurulumlar için daha iyi ancak LDAP bilgisi gerektirir.",
+"Manually enter LDAP filters (recommended for large directories)" => "LDAP filtrelerini el ile girin (büyük dizinler için önerilir)",
"Limit %s access to users meeting these criteria:" => "%s erişimini, şu kriterlerle eşleşen kullanıcılara sınırla:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Filtre, %s örneğine erişmesi gereken LDAP kullanıcılarını belirtir.",
"users found" => "kullanıcı bulundu",
+"Saving" => "Kaydediliyor",
"Back" => "Geri",
"Continue" => "Devam et",
"Expert" => "Uzman",
diff --git a/apps/user_ldap/l10n/uk.php b/apps/user_ldap/l10n/uk.php
index 19d37a282b7..7259fc8ba13 100644
--- a/apps/user_ldap/l10n/uk.php
+++ b/apps/user_ldap/l10n/uk.php
@@ -1,26 +1,63 @@
<?php
$TRANSLATIONS = array(
+"Failed to clear the mappings." => "Не вдалося очистити відображення.",
"Failed to delete the server configuration" => "Не вдалося видалити конфігурацію сервера",
"The configuration is valid and the connection could be established!" => "Конфігурація вірна і зв'язок може бути встановлений ​​!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Конфігурація вірна, але встановити зв'язок не вдалося. Будь ласка, перевірте налаштування сервера і облікові дані.",
+"The configuration is invalid. Please have a look at the logs for further details." => "Конфігурація є недійсною. Будь ласка, дивіться журнали для отримання додаткової інформації.",
+"No action specified" => "Ніяких дій не вказано",
+"No configuration specified" => "Немає конфігурації",
+"No data specified" => "Немає даних",
+" Could not set configuration %s" => "Не вдалося встановити конфігурацію %s",
"Deletion failed" => "Видалення не було виконано",
"Take over settings from recent server configuration?" => "Застосувати налаштування з останньої конфігурації сервера ?",
"Keep settings?" => "Зберегти налаштування ?",
+"{nthServer}. Server" => "{nthServer}. Сервер",
"Cannot add server configuration" => "Неможливо додати конфігурацію сервера",
+"mappings cleared" => "відображення очищається",
"Success" => "Успіх",
"Error" => "Помилка",
+"Please specify a Base DN" => "Введіть Base DN",
+"Could not determine Base DN" => "Не вдалося визначити Base DN",
+"Please specify the port" => "Будь ласка, вкажіть порт",
+"Configuration OK" => "Конфігурація OK",
+"Configuration incorrect" => "Невірна конфігурація",
+"Configuration incomplete" => "Конфігурація неповна",
"Select groups" => "Оберіть групи",
+"Select object classes" => "Виберіть класи об'єктів",
+"Select attributes" => "Виберіть атрибути",
"Connection test succeeded" => "Перевірка з'єднання пройшла успішно",
"Connection test failed" => "Перевірка з'єднання завершилась неуспішно",
"Do you really want to delete the current Server Configuration?" => "Ви дійсно бажаєте видалити поточну конфігурацію сервера ?",
"Confirm Deletion" => "Підтвердіть Видалення",
-"_%s group found_::_%s groups found_" => array("","",""),
-"_%s user found_::_%s users found_" => array("","",""),
+"_%s group found_::_%s groups found_" => array(" %s група знайдена "," %s груп знайдено ","%s груп знайдено "),
+"_%s user found_::_%s users found_" => array("%s користувач знайден","%s користувачів знайдено","%s користувачів знайдено"),
+"Could not find the desired feature" => "Не вдалося знайти потрібну функцію",
+"Invalid Host" => "Невірний Host",
+"Server" => "Сервер",
+"User Filter" => "Користувацький Фільтр",
+"Login Filter" => "Фільтр Входу",
"Group Filter" => "Фільтр Груп",
"Save" => "Зберегти",
"Test Configuration" => "Тестове налаштування",
"Help" => "Допомога",
+"Groups meeting these criteria are available in %s:" => "Групи, що відповідають цим критеріям доступні в %s:",
+"only those object classes:" => "тільки ці об'єктні класи:",
+"only from those groups:" => "тільки з цих груп:",
+"Edit raw filter instead" => "Редагувати початковий фільтр",
+"Raw LDAP filter" => "Початковий LDAP фільтр",
+"The filter specifies which LDAP groups shall have access to the %s instance." => "Фільтр визначає, які LDAP групи повинні мати доступ до %s примірника.",
+"Test Filter" => "Тест Фільтр",
+"groups found" => "знайдені групи",
+"Users login with this attribute:" => "Вхід користувачів з цим атрибутом:",
+"LDAP Username:" => "LDAP Ім’я користувача:",
+"LDAP Email Address:" => "LDAP E-mail адрес:",
+"Other Attributes:" => "Інші Атрібути:",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Визначає фільтр, який слід застосовувати при спробі входу.\n%%uid замінює ім'я користувача при вході в систему. Приклад: \"uid=%%uid\"",
+"1. Server" => "1. Сервер",
+"%s. Server:" => "%s. Сервер:",
"Add Server Configuration" => "Додати налаштування Сервера",
+"Delete Configuration" => "Видалити Конфігурацію",
"Host" => "Хост",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можна не вказувати протокол, якщо вам не потрібен SSL. Тоді почніть з ldaps://",
"Port" => "Порт",
@@ -30,9 +67,17 @@ $TRANSLATIONS = array(
"For anonymous access, leave DN and Password empty." => "Для анонімного доступу, залиште DN і Пароль порожніми.",
"One Base DN per line" => "Один Base DN на одній строчці",
"You can specify Base DN for users and groups in the Advanced tab" => "Ви можете задати Базовий DN для користувачів і груп на вкладинці Додатково",
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." => "Уникати автоматичні запити LDAP. Краще для великих установок, але вимагає деякого LDAP знання.",
+"Manually enter LDAP filters (recommended for large directories)" => "Вручну введіть LDAP фільтри (рекомендується для великих каталогів)",
+"Limit %s access to users meeting these criteria:" => "Обмежити %s доступ до користувачів, що відповідають цим критеріям:",
+"The filter specifies which LDAP users shall have access to the %s instance." => "Фільтр визначає, які користувачі LDAP повині мати доступ до примірника %s.",
+"users found" => "користувачів знайдено",
+"Saving" => "Збереження",
"Back" => "Назад",
"Continue" => "Продовжити",
+"Expert" => "Експерт",
"Advanced" => "Додатково",
+"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Попередження:</b> Застосунки user_ldap та user_webdavauth не сумісні. Ви можете зіткнутися з несподіваною поведінкою. Будь ласка, зверніться до системного адміністратора, щоб відключити одну з них.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Увага:</ b> Потрібний модуль PHP LDAP не встановлено, базова програма працювати не буде. Будь ласка, зверніться до системного адміністратора, щоб встановити його.",
"Connection Settings" => "Налаштування З'єднання",
"Configuration Active" => "Налаштування Активне",
@@ -41,26 +86,46 @@ $TRANSLATIONS = array(
"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Вкажіть додатковий резервний сервер. Він повинен бути копією головного LDAP/AD сервера.",
"Backup (Replica) Port" => "Порт сервера для резервних копій",
"Disable Main Server" => "Вимкнути Головний Сервер",
+"Only connect to the replica server." => "Підключити тільки до сервера реплік.",
+"Case insensitive LDAP server (Windows)" => "Без урахування регістра LDAP сервер (Windows)",
"Turn off SSL certificate validation." => "Вимкнути перевірку SSL сертифіката.",
+"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Не рекомендується, використовувати його тільки для тестування!\nЯкщо з'єднання працює лише з цією опцією, імпортуйте SSL сертифікат LDAP сервера у ваший %s сервер.",
"Cache Time-To-Live" => "Час актуальності Кеша",
"in seconds. A change empties the cache." => "в секундах. Зміна очищує кеш.",
"Directory Settings" => "Налаштування Каталога",
"User Display Name Field" => "Поле, яке відображає Ім'я Користувача",
+"The LDAP attribute to use to generate the user's display name." => "Атрибут LDAP, який використовується для генерації імен користувачів.",
"Base User Tree" => "Основне Дерево Користувачів",
"One User Base DN per line" => "Один Користувач Base DN на одній строчці",
"User Search Attributes" => "Пошукові Атрибути Користувача",
"Optional; one attribute per line" => "Додатково; один атрибут на строчку",
"Group Display Name Field" => "Поле, яке відображає Ім'я Групи",
+"The LDAP attribute to use to generate the groups's display name." => "Атрибут LDAP, який використовується для генерації імен груп.",
"Base Group Tree" => "Основне Дерево Груп",
"One Group Base DN per line" => "Одна Група Base DN на одній строчці",
"Group Search Attributes" => "Пошукові Атрибути Групи",
"Group-Member association" => "Асоціація Група-Член",
+"Nested Groups" => "Вкладені Групи",
+"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" => "При включенні, групи, які містять групи підтримуються. (Працює тільки якщо атрибут члена групи містить DNS.)",
+"Paging chunksize" => "Розмір підкачки",
+"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" => "Підкачка використовується для сторінкових пошуків LDAP, які можуть повертати громіздкі результати кількісті користувачів або груп. (Установка його 0 відключає вивантаженя пошуку LDAP в таких ситуаціях.)",
"Special Attributes" => "Спеціальні Атрибути",
"Quota Field" => "Поле Квоти",
"Quota Default" => "Квота за замовчанням",
"in bytes" => "в байтах",
"Email Field" => "Поле Ел. пошти",
"User Home Folder Naming Rule" => "Правило іменування домашньої теки користувача",
-"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Залиште порожнім для імені користувача (за замовчанням). Інакше, вкажіть атрибут LDAP/AD."
+"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Залиште порожнім для імені користувача (за замовчанням). Інакше, вкажіть атрибут LDAP/AD.",
+"Internal Username" => "Внутрішня Ім'я користувача",
+"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "За замовчуванням внутрішнє ім'я користувача буде створено з атрибуту UUID. Таким чином ім'я користувача є унікальним і не потребує перетворення символів. Внутрішнє ім'я користувача може складатися лише з наступних символів: [A-Za-z0-9 _ @ -.]. Інші символи заміняються відповідними з таблиці ASCII або пропускаються. При збігу до імені буде додано або збільшено число. Внутрішнє ім'я користувача використовується для внутрішньої ідентифікації користувача. Це також ім'я за замовчуванням для домашньої теки користувача та частина віддалених URL, наприклад, для всіх сервісів *DAV. За допомогою цієї установки можна змінити поведінку за замовчуванням. Для досягнення поведінки, що була до OwnCloud 5, введіть атрибут ім'я користувача, що відображається, в наступне поле. Залиште порожнім для режиму за замовчуванням. Зміни будуть діяти тільки для нових підключень (доданих) користувачів LDAP.",
+"Internal Username Attribute:" => "Внутрішня Ім'я користувача, Атрибут:",
+"Override UUID detection" => "Перекрити вивід UUID ",
+"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "За замовчуванням ownCloud визначає атрибут UUID автоматично. Цей атрибут використовується для того, щоб достовірно ідентифікувати користувачів і групи LDAP. Також на підставі атрибута UUID створюється внутрішнє ім'я користувача, якщо вище не вказано інакше. Ви можете перевизначити це налаштування та вказати свій атрибут за вибором. Ви повинні упевнитися, що обраний вами атрибут може бути вибраний для користувачів і груп, а також те, що він унікальний. Залиште поле порожнім для поведінки за замовчуванням. Зміни вступлять в силу тільки для нових підключених (доданих) користувачів і груп LDAP.",
+"UUID Attribute for Users:" => "UUID Атрибут для користувачів:",
+"UUID Attribute for Groups:" => "UUID Атрибут для груп:",
+"Username-LDAP User Mapping" => "Картографія Імен користувачів-LDAP ",
+"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ownCloud використовує імена користувачів для зберігання і призначення метаданих. Для точної ідентифікації і розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатору UUID користувача LDAP. Крім цього кешується розрізнювальне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо розрізнювальне ім'я було змінене, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується скрізь в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язано до конфігурації, він вплине на всі LDAP-підключення! Ні в якому разі не рекомендується скидати прив'язки, якщо система вже знаходиться в експлуатації, тільки на етапі тестування.",
+"Clear Username-LDAP User Mapping" => "Очистити картографію Імен користувачів-LDAP",
+"Clear Groupname-LDAP Group Mapping" => "Очистити картографію Імен груп-LDAP"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 159b0d73000..44162e32d47 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -1359,7 +1359,7 @@ class Access extends LDAPUtility implements user\IUserTools {
* @param string[] $bases array containing the allowed base DN or DNs
* @return bool
*/
- private function isDNPartOfBase($dn, $bases) {
+ public function isDNPartOfBase($dn, $bases) {
$belongsToBase = false;
$bases = $this->sanitizeDN($bases);
diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php
index 4cb00561b3f..28e456ae2ef 100644
--- a/apps/user_ldap/lib/configuration.php
+++ b/apps/user_ldap/lib/configuration.php
@@ -69,6 +69,7 @@ class Configuration {
'ldapConfigurationActive' => false,
'ldapAttributesForUserSearch' => null,
'ldapAttributesForGroupSearch' => null,
+ 'ldapExperiencedAdmin' => false,
'homeFolderNamingRule' => null,
'hasPagedResultSupport' => false,
'hasMemberOfFilterSupport' => false,
@@ -345,52 +346,53 @@ class Configuration {
*/
public function getDefaults() {
return array(
- 'ldap_host' => '',
- 'ldap_port' => '',
- 'ldap_backup_host' => '',
- 'ldap_backup_port' => '',
- 'ldap_override_main_server' => '',
- 'ldap_dn' => '',
- 'ldap_agent_password' => '',
- 'ldap_base' => '',
- 'ldap_base_users' => '',
- 'ldap_base_groups' => '',
- 'ldap_userlist_filter' => '',
- 'ldap_user_filter_mode' => 0,
- 'ldap_userfilter_objectclass' => '',
- 'ldap_userfilter_groups' => '',
- 'ldap_login_filter' => '',
- 'ldap_login_filter_mode' => 0,
- 'ldap_loginfilter_email' => 0,
- 'ldap_loginfilter_username' => 1,
- 'ldap_loginfilter_attributes' => '',
- 'ldap_group_filter' => '',
- 'ldap_group_filter_mode' => 0,
- 'ldap_groupfilter_objectclass' => '',
- 'ldap_groupfilter_groups' => '',
- 'ldap_display_name' => 'displayName',
- 'ldap_group_display_name' => 'cn',
- 'ldap_tls' => 1,
- 'ldap_nocase' => 0,
- 'ldap_quota_def' => '',
- 'ldap_quota_attr' => '',
- 'ldap_email_attr' => '',
- 'ldap_group_member_assoc_attribute' => 'uniqueMember',
- 'ldap_cache_ttl' => 600,
- 'ldap_uuid_user_attribute' => 'auto',
- 'ldap_uuid_group_attribute' => 'auto',
- 'home_folder_naming_rule' => '',
- 'ldap_turn_off_cert_check' => 0,
- 'ldap_configuration_active' => 0,
- 'ldap_attributes_for_user_search' => '',
- 'ldap_attributes_for_group_search' => '',
- 'ldap_expert_username_attr' => '',
- 'ldap_expert_uuid_user_attr' => '',
- 'ldap_expert_uuid_group_attr' => '',
- 'has_memberof_filter_support' => 0,
- 'last_jpegPhoto_lookup' => 0,
- 'ldap_nested_groups' => 0,
- 'ldap_paging_size' => 500,
+ 'ldap_host' => '',
+ 'ldap_port' => '',
+ 'ldap_backup_host' => '',
+ 'ldap_backup_port' => '',
+ 'ldap_override_main_server' => '',
+ 'ldap_dn' => '',
+ 'ldap_agent_password' => '',
+ 'ldap_base' => '',
+ 'ldap_base_users' => '',
+ 'ldap_base_groups' => '',
+ 'ldap_userlist_filter' => '',
+ 'ldap_user_filter_mode' => 0,
+ 'ldap_userfilter_objectclass' => '',
+ 'ldap_userfilter_groups' => '',
+ 'ldap_login_filter' => '',
+ 'ldap_login_filter_mode' => 0,
+ 'ldap_loginfilter_email' => 0,
+ 'ldap_loginfilter_username' => 1,
+ 'ldap_loginfilter_attributes' => '',
+ 'ldap_group_filter' => '',
+ 'ldap_group_filter_mode' => 0,
+ 'ldap_groupfilter_objectclass' => '',
+ 'ldap_groupfilter_groups' => '',
+ 'ldap_display_name' => 'displayName',
+ 'ldap_group_display_name' => 'cn',
+ 'ldap_tls' => 1,
+ 'ldap_nocase' => 0,
+ 'ldap_quota_def' => '',
+ 'ldap_quota_attr' => '',
+ 'ldap_email_attr' => '',
+ 'ldap_group_member_assoc_attribute' => 'uniqueMember',
+ 'ldap_cache_ttl' => 600,
+ 'ldap_uuid_user_attribute' => 'auto',
+ 'ldap_uuid_group_attribute' => 'auto',
+ 'home_folder_naming_rule' => '',
+ 'ldap_turn_off_cert_check' => 0,
+ 'ldap_configuration_active' => 0,
+ 'ldap_attributes_for_user_search' => '',
+ 'ldap_attributes_for_group_search' => '',
+ 'ldap_expert_username_attr' => '',
+ 'ldap_expert_uuid_user_attr' => '',
+ 'ldap_expert_uuid_group_attr' => '',
+ 'has_memberof_filter_support' => 0,
+ 'last_jpegPhoto_lookup' => 0,
+ 'ldap_nested_groups' => 0,
+ 'ldap_paging_size' => 500,
+ 'ldap_experienced_admin' => 0,
);
}
@@ -400,50 +402,51 @@ class Configuration {
public function getConfigTranslationArray() {
//TODO: merge them into one representation
static $array = array(
- 'ldap_host' => 'ldapHost',
- 'ldap_port' => 'ldapPort',
- 'ldap_backup_host' => 'ldapBackupHost',
- 'ldap_backup_port' => 'ldapBackupPort',
- 'ldap_override_main_server' => 'ldapOverrideMainServer',
- 'ldap_dn' => 'ldapAgentName',
- 'ldap_agent_password' => 'ldapAgentPassword',
- 'ldap_base' => 'ldapBase',
- 'ldap_base_users' => 'ldapBaseUsers',
- 'ldap_base_groups' => 'ldapBaseGroups',
- 'ldap_userfilter_objectclass' => 'ldapUserFilterObjectclass',
- 'ldap_userfilter_groups' => 'ldapUserFilterGroups',
- 'ldap_userlist_filter' => 'ldapUserFilter',
- 'ldap_user_filter_mode' => 'ldapUserFilterMode',
- 'ldap_login_filter' => 'ldapLoginFilter',
- 'ldap_login_filter_mode' => 'ldapLoginFilterMode',
- 'ldap_loginfilter_email' => 'ldapLoginFilterEmail',
- 'ldap_loginfilter_username' => 'ldapLoginFilterUsername',
- 'ldap_loginfilter_attributes' => 'ldapLoginFilterAttributes',
- 'ldap_group_filter' => 'ldapGroupFilter',
- 'ldap_group_filter_mode' => 'ldapGroupFilterMode',
- 'ldap_groupfilter_objectclass' => 'ldapGroupFilterObjectclass',
- 'ldap_groupfilter_groups' => 'ldapGroupFilterGroups',
- 'ldap_display_name' => 'ldapUserDisplayName',
- 'ldap_group_display_name' => 'ldapGroupDisplayName',
- 'ldap_tls' => 'ldapTLS',
- 'ldap_nocase' => 'ldapNoCase',
- 'ldap_quota_def' => 'ldapQuotaDefault',
- 'ldap_quota_attr' => 'ldapQuotaAttribute',
- 'ldap_email_attr' => 'ldapEmailAttribute',
- 'ldap_group_member_assoc_attribute' => 'ldapGroupMemberAssocAttr',
- 'ldap_cache_ttl' => 'ldapCacheTTL',
- 'home_folder_naming_rule' => 'homeFolderNamingRule',
- 'ldap_turn_off_cert_check' => 'turnOffCertCheck',
- 'ldap_configuration_active' => 'ldapConfigurationActive',
- 'ldap_attributes_for_user_search' => 'ldapAttributesForUserSearch',
- 'ldap_attributes_for_group_search' => 'ldapAttributesForGroupSearch',
- 'ldap_expert_username_attr' => 'ldapExpertUsernameAttr',
- 'ldap_expert_uuid_user_attr' => 'ldapExpertUUIDUserAttr',
- 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr',
- 'has_memberof_filter_support' => 'hasMemberOfFilterSupport',
- 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup',
+ 'ldap_host' => 'ldapHost',
+ 'ldap_port' => 'ldapPort',
+ 'ldap_backup_host' => 'ldapBackupHost',
+ 'ldap_backup_port' => 'ldapBackupPort',
+ 'ldap_override_main_server' => 'ldapOverrideMainServer',
+ 'ldap_dn' => 'ldapAgentName',
+ 'ldap_agent_password' => 'ldapAgentPassword',
+ 'ldap_base' => 'ldapBase',
+ 'ldap_base_users' => 'ldapBaseUsers',
+ 'ldap_base_groups' => 'ldapBaseGroups',
+ 'ldap_userfilter_objectclass' => 'ldapUserFilterObjectclass',
+ 'ldap_userfilter_groups' => 'ldapUserFilterGroups',
+ 'ldap_userlist_filter' => 'ldapUserFilter',
+ 'ldap_user_filter_mode' => 'ldapUserFilterMode',
+ 'ldap_login_filter' => 'ldapLoginFilter',
+ 'ldap_login_filter_mode' => 'ldapLoginFilterMode',
+ 'ldap_loginfilter_email' => 'ldapLoginFilterEmail',
+ 'ldap_loginfilter_username' => 'ldapLoginFilterUsername',
+ 'ldap_loginfilter_attributes' => 'ldapLoginFilterAttributes',
+ 'ldap_group_filter' => 'ldapGroupFilter',
+ 'ldap_group_filter_mode' => 'ldapGroupFilterMode',
+ 'ldap_groupfilter_objectclass' => 'ldapGroupFilterObjectclass',
+ 'ldap_groupfilter_groups' => 'ldapGroupFilterGroups',
+ 'ldap_display_name' => 'ldapUserDisplayName',
+ 'ldap_group_display_name' => 'ldapGroupDisplayName',
+ 'ldap_tls' => 'ldapTLS',
+ 'ldap_nocase' => 'ldapNoCase',
+ 'ldap_quota_def' => 'ldapQuotaDefault',
+ 'ldap_quota_attr' => 'ldapQuotaAttribute',
+ 'ldap_email_attr' => 'ldapEmailAttribute',
+ 'ldap_group_member_assoc_attribute' => 'ldapGroupMemberAssocAttr',
+ 'ldap_cache_ttl' => 'ldapCacheTTL',
+ 'home_folder_naming_rule' => 'homeFolderNamingRule',
+ 'ldap_turn_off_cert_check' => 'turnOffCertCheck',
+ 'ldap_configuration_active' => 'ldapConfigurationActive',
+ 'ldap_attributes_for_user_search' => 'ldapAttributesForUserSearch',
+ 'ldap_attributes_for_group_search' => 'ldapAttributesForGroupSearch',
+ 'ldap_expert_username_attr' => 'ldapExpertUsernameAttr',
+ 'ldap_expert_uuid_user_attr' => 'ldapExpertUUIDUserAttr',
+ 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr',
+ 'has_memberof_filter_support' => 'hasMemberOfFilterSupport',
+ 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup',
'ldap_nested_groups' => 'ldapNestedGroups',
'ldap_paging_size' => 'ldapPagingSize',
+ 'ldap_experienced_admin' => 'ldapExperiencedAdmin'
);
return $array;
}
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index e2a85ea5eb9..1d7701440e9 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -685,7 +685,8 @@ class Wizard extends LDAPUtility {
$this->ldap->getDN($cr, $er);
$attrs = $this->ldap->getAttributes($cr, $er);
$result = array();
- for($i = 0; $i < count($possibleAttrs); $i++) {
+ $possibleAttrsCount = count($possibleAttrs);
+ for($i = 0; $i < $possibleAttrsCount; $i++) {
if(isset($attrs[$possibleAttrs[$i]])) {
$result[$possibleAttrs[$i]] = $attrs[$possibleAttrs[$i]]['count'];
}
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index e7cdd0d926a..ca61a53b196 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -26,6 +26,7 @@
OC_Util::checkAdminUser();
OCP\Util::addScript('user_ldap', 'ldapFilter');
+OCP\Util::addScript('user_ldap', 'experiencedAdmin');
OCP\Util::addScript('user_ldap', 'settings');
OCP\Util::addScript('core', 'jquery.multiselect');
OCP\Util::addStyle('user_ldap', 'settings');
@@ -53,8 +54,8 @@ $wizTabs[] = array('tpl' => 'part.wizard-server', 'cap' => $l->t('Server'))
$wizTabs[] = array('tpl' => 'part.wizard-userfilter', 'cap' => $l->t('User Filter'));
$wizTabs[] = array('tpl' => 'part.wizard-loginfilter', 'cap' => $l->t('Login Filter'));
$wizTabs[] = array('tpl' => 'part.wizard-groupfilter', 'cap' => $l->t('Group Filter'));
-
-for($i = 0; $i < count($wizTabs); $i++) {
+$wizTabsCount = count($wizTabs);
+for($i = 0; $i < $wizTabsCount; $i++) {
$tab = new OCP\Template('user_ldap', $wizTabs[$i]['tpl']);
if($i === 0) {
$tab->assign('serverConfigurationPrefixes', $prefixes);
diff --git a/apps/user_ldap/templates/part.wizard-groupfilter.php b/apps/user_ldap/templates/part.wizard-groupfilter.php
index e460997b1bf..1953d2eaa6e 100644
--- a/apps/user_ldap/templates/part.wizard-groupfilter.php
+++ b/apps/user_ldap/templates/part.wizard-groupfilter.php
@@ -30,13 +30,16 @@
placeholder="<?php p($l->t('Raw LDAP filter'));?>"
title="<?php p($l->t('The filter specifies which LDAP groups shall have access to the %s instance.', $theme->getName()));?>"
/>
+ <button class="ldapGetEntryCount hidden" name="ldapGetEntryCount" type="button">
+ <?php p($l->t('Test Filter'));?>
+ </button>
</p>
<p>
<div class="ldapWizardInfo invisible">&nbsp;</div>
</p>
- <p>
+ <p class="ldap_count">
<span id="ldap_group_count">0 <?php p($l->t('groups found'));?></span>
</p>
<?php print_unescaped($_['wizardControls']); ?>
</div>
-</fieldset> \ No newline at end of file
+</fieldset>
diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php
index bee2b874178..c1744143f98 100644
--- a/apps/user_ldap/templates/part.wizard-server.php
+++ b/apps/user_ldap/templates/part.wizard-server.php
@@ -69,6 +69,16 @@
</textarea>
</div>
+ <div class="tablerow left">
+ <input type="checkbox" id="ldap_experienced_admin" value="1"
+ name="ldap_experienced_admin" class="tablecell lwautosave"
+ title="<?php p($l->t('Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.'));?>"
+ />
+ <label for="ldap_experienced_admin" class="tablecell">
+ <?php p($l->t('Manually enter LDAP filters (recommended for large directories)'));?>
+ </label>
+ </div>
+
<div class="tablerow">
<div class="tablecell ldapWizardInfo invisible">&nbsp;
</div>
diff --git a/apps/user_ldap/templates/part.wizard-userfilter.php b/apps/user_ldap/templates/part.wizard-userfilter.php
index eff9f89ce2c..99a6e75370b 100644
--- a/apps/user_ldap/templates/part.wizard-userfilter.php
+++ b/apps/user_ldap/templates/part.wizard-userfilter.php
@@ -30,13 +30,16 @@
placeholder="<?php p($l->t('Raw LDAP filter'));?>"
title="<?php p($l->t('The filter specifies which LDAP users shall have access to the %s instance.', $theme->getName()));?>"
/>
+ <button class="ldapGetEntryCount hidden" name="ldapGetEntryCount" type="button">
+ <?php p($l->t('Test Filter'));?>
+ </button>
</p>
<p>
<div class="ldapWizardInfo invisible">&nbsp;</div>
</p>
- <p>
+ <p class="ldap_count">
<span id="ldap_user_count">0 <?php p($l->t('users found'));?></span>
</p>
<?php print_unescaped($_['wizardControls']); ?>
</div>
-</fieldset> \ No newline at end of file
+</fieldset>
diff --git a/apps/user_ldap/templates/part.wizardcontrols.php b/apps/user_ldap/templates/part.wizardcontrols.php
index 33e1614c9c6..90d558e72d1 100644
--- a/apps/user_ldap/templates/part.wizardcontrols.php
+++ b/apps/user_ldap/templates/part.wizardcontrols.php
@@ -1,4 +1,5 @@
<div class="ldapWizardControls">
+ <span class="ldap_saving hidden"><?php p($l->t('Saving'));?> <img class="wizSpinner" src="<?php p(image_path('core', 'loading.gif')); ?>"/></span>
<span class="ldap_config_state_indicator"></span> <span class="ldap_config_state_indicator_sign"></span>
<button class="ldap_action_back invisible" name="ldap_action_back"
type="button">
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index c4aed25a1cc..d1262e4f5b8 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -59,10 +59,7 @@ class Test_Group_Ldap extends \PHPUnit_Framework_TestCase {
private function enableGroups($access) {
$access->connection->expects($this->any())
->method('__get')
- ->will($this->returnCallback(function($name) {
-// if($name === 'ldapLoginFilter') {
-// return '%uid';
-// }
+ ->will($this->returnCallback(function() {
return 1;
}));
}
@@ -269,4 +266,32 @@ class Test_Group_Ldap extends \PHPUnit_Framework_TestCase {
$this->assertSame(false, $gid);
}
+ /**
+ * tests whether Group Backend behaves correctly when cache with uid and gid
+ * is hit
+ */
+ public function testInGroupHitsUidGidCache() {
+ $access = $this->getAccessMock();
+ $this->enableGroups($access);
+
+ $uid = 'someUser';
+ $gid = 'someGroup';
+ $cacheKey = 'inGroup'.$uid.':'.$gid;
+ $access->connection->expects($this->once())
+ ->method('isCached')
+ ->with($cacheKey)
+ ->will($this->returnValue(true));
+
+ $access->connection->expects($this->once())
+ ->method('getFromCache')
+ ->with($cacheKey)
+ ->will($this->returnValue(true));
+
+ $access->expects($this->never())
+ ->method('username2dn');
+
+ $groupBackend = new GroupLDAP($access);
+ $groupBackend->inGroup($uid, $gid);
+ }
+
}
diff --git a/apps/user_webdavauth/appinfo/app.php b/apps/user_webdavauth/appinfo/app.php
index 3cd227bddbe..3cd227bddbe 100755..100644
--- a/apps/user_webdavauth/appinfo/app.php
+++ b/apps/user_webdavauth/appinfo/app.php
diff --git a/apps/user_webdavauth/appinfo/info.xml b/apps/user_webdavauth/appinfo/info.xml
index abbf79131b5..abbf79131b5 100755..100644
--- a/apps/user_webdavauth/appinfo/info.xml
+++ b/apps/user_webdavauth/appinfo/info.xml
diff --git a/apps/user_webdavauth/l10n/uk.php b/apps/user_webdavauth/l10n/uk.php
index b548b01951b..1b1463e5b75 100644
--- a/apps/user_webdavauth/l10n/uk.php
+++ b/apps/user_webdavauth/l10n/uk.php
@@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"WebDAV Authentication" => "Аутентифікація WebDAV",
+"Address:" => "Адреси:",
"Save" => "Зберегти",
"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Облікові дані користувача буде надіслано на цю адресу. Цей плагін перевіряє відповідь і буде інтерпретувати коди статусу HTTP 401 і 403, як неправильні облікові дані, а всі інші відповіді, вважатимуться правильними."
);
diff --git a/apps/user_webdavauth/settings.php b/apps/user_webdavauth/settings.php
index ae9cb7e4c92..ae9cb7e4c92 100755..100644
--- a/apps/user_webdavauth/settings.php
+++ b/apps/user_webdavauth/settings.php
diff --git a/apps/user_webdavauth/templates/settings.php b/apps/user_webdavauth/templates/settings.php
index a87c0ad159a..a87c0ad159a 100755..100644
--- a/apps/user_webdavauth/templates/settings.php
+++ b/apps/user_webdavauth/templates/settings.php
diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php
index 86e5b916f3d..86e5b916f3d 100755..100644
--- a/apps/user_webdavauth/user_webdavauth.php
+++ b/apps/user_webdavauth/user_webdavauth.php
diff --git a/config/.htaccess b/config/.htaccess
index 2421e9a1631..2421e9a1631 100755..100644
--- a/config/.htaccess
+++ b/config/.htaccess
diff --git a/config/config.sample.php b/config/config.sample.php
index 0a21978ba2b..09b59fcb5b4 100755..100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -5,8 +5,9 @@
* configuration options and their usage.
*
* DO NOT COMPLETELY BASE YOUR CONFIGURATION FILE ON THIS SAMPLE. THIS MAY BREAK
- * YOUR INSTANCE. Instead, manually copy configurations switches that you
- * consider important for your instance to your configuration.
+ * YOUR INSTANCE. Instead, manually copy configuration switches that you
+ * consider important for your instance to your working ``config.php``, and
+ * apply configuration options that are pertinent for your instance.
*
* This file is used to generate the config documentation. Please consider
* following requirements of the current parser:
@@ -38,14 +39,21 @@ $CONFIG = array(
/**
* This is a unique identifier for your ownCloud installation, created
- * automatically by the installer. Do not change it.
+ * automatically by the installer. This example is for documentation only,
+ * and you should never use it because it will not work. A valid ``instanceid``
+ * is created when you install ownCloud.
+ *
+ * 'instanceid' => 'd3c944a9a',
*/
'instanceid' => '',
-/**
+ /**
* The salt used to hash all passwords, auto-generated by the ownCloud
* installer. (There are also per-user salts.) If you lose this salt you lose
- * all your passwords.
+ * all your passwords. This example is for documentation only,
+ * and you should never use it.
+ *
+ *'passwordsalt' => 'd3c944a9af095aa08f',
*/
'passwordsalt' => '',
@@ -54,13 +62,18 @@ $CONFIG = array(
* domains prevents host header poisoning. Do not remove this, as it performs
* necessary security checks.
*/
-'trusted_domains' => array('demo.example.org', 'otherdomain.example.org:8080'),
+'trusted_domains' =>
+ array (
+ 'demo.example.org',
+ 'otherdomain.example.org:8080',
+ ),
+
/**
* Where user files are stored; this defaults to ``data/`` in the ownCloud
* directory. The SQLite database is also stored here, when you use SQLite.
*/
-'datadirectory' => '',
+'datadirectory' => '/var/www/owncloud/data',
/**
* The current version number of your ownCloud installation. This is set up
@@ -107,6 +120,13 @@ $CONFIG = array(
'dbtableprefix' => '',
/**
+ * Additional driver options for the database connection, eg. to enable SSL encryption in MySQL:
+ */
+'dbdriveroptions' => array(
+ PDO::MYSQL_ATTR_SSL_CA => '/file/path/to/ca_cert.pem',
+),
+
+/**
* Indicates whether the ownCloud instance was installed successfully; ``true``
* indicates a successful installation, and ``false`` indicates an unsuccessful
* installation.
@@ -537,7 +557,14 @@ $CONFIG = array(
*/
/**
- * TODO
+ * By default, ownCloud can generate previews for the following filetypes:
+ *
+ * - Images files
+ * - Covers of MP3 files
+ * - Text documents
+ *
+ * Valid values are ``true``, to enable previews, or
+ * ``false``, to disable previews
*/
'enable_previews' => true,
/**
@@ -649,7 +676,8 @@ $CONFIG = array(
*/
/**
- * Blacklist a specific file and disallow the upload of files with this name
+ * Blacklist a specific file or files and disallow the upload of files
+ * with this name. ``.htaccess`` is blocked by default.
* WARNING: USE THIS ONLY IF YOU KNOW WHAT YOU ARE DOING.
*/
'blacklisted_files' => array('.htaccess'),
@@ -780,6 +808,23 @@ $CONFIG = array(
),
/**
+ * Database types that are supported for installation
+ * Available:
+ * - sqlite (SQLite3)
+ * - mysql (MySQL)
+ * - pgsql (PostgreSQL)
+ * - oci (Oracle)
+ * - mssql (Microsoft SQL Server)
+ */
+'supportedDatabases' => array(
+ 'sqlite',
+ 'mysql',
+ 'pgsql',
+ 'oci',
+ 'mssql'
+),
+
+/**
* Custom CSP policy, changing this will overwrite the standard policy
*/
'custom_csp_policy' =>
diff --git a/core/ajax/appconfig.php b/core/ajax/appconfig.php
index 05b7572c6d7..7d73185dae6 100644
--- a/core/ajax/appconfig.php
+++ b/core/ajax/appconfig.php
@@ -24,27 +24,28 @@ if($app === 'core' && isset($_POST['key']) &&(substr($_POST['key'],0,7) === 'rem
}
$result=false;
+$appConfig = \OC::$server->getAppConfig();
switch($action) {
case 'getValue':
- $result=OC_Appconfig::getValue($app, $_GET['key'], $_GET['defaultValue']);
+ $result=$appConfig->getValue($app, $_GET['key'], $_GET['defaultValue']);
break;
case 'setValue':
- $result=OC_Appconfig::setValue($app, $_POST['key'], $_POST['value']);
+ $result=$appConfig->setValue($app, $_POST['key'], $_POST['value']);
break;
case 'getApps':
- $result=OC_Appconfig::getApps();
+ $result=$appConfig->getApps();
break;
case 'getKeys':
- $result=OC_Appconfig::getKeys($app);
+ $result=$appConfig->getKeys($app);
break;
case 'hasKey':
- $result=OC_Appconfig::hasKey($app, $_GET['key']);
+ $result=$appConfig->hasKey($app, $_GET['key']);
break;
case 'deleteKey':
- $result=OC_Appconfig::deleteKey($app, $_POST['key']);
+ $result=$appConfig->deleteKey($app, $_POST['key']);
break;
case 'deleteApp':
- $result=OC_Appconfig::deleteApp($app);
+ $result=$appConfig->deleteApp($app);
break;
}
OC_JSON::success(array('data'=>$result));
diff --git a/core/avatar/controller.php b/core/avatar/controller.php
index 03eb9da1dc5..ca055f5fd75 100644
--- a/core/avatar/controller.php
+++ b/core/avatar/controller.php
@@ -12,6 +12,7 @@ class Controller {
public static function getAvatar($args) {
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
+ \OC::$server->getSession()->close();
$user = stripslashes($args['user']);
$size = (int)$args['size'];
diff --git a/core/command/maintenance/repair.php b/core/command/maintenance/repair.php
index 9af5996b2e1..7c0cf71d3b6 100644
--- a/core/command/maintenance/repair.php
+++ b/core/command/maintenance/repair.php
@@ -35,10 +35,6 @@ class Repair extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- // TODO: inject DB connection/factory when possible
- $connection = \OC_DB::getConnection();
- $connection->disableQueryStatementCaching();
-
$maintenanceMode = $this->config->getValue('maintenance', false);
$this->config->setValue('maintenance', true);
diff --git a/core/css/apps.css b/core/css/apps.css
index 35487bee598..898259ed9d5 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -479,7 +479,7 @@ button.loading {
border-top: 1px solid #ddd;
}
/* no top border for first settings item */
-.section:first-child {
+#app-content > .section:first-child {
border-top: none;
}
.section h2 {
diff --git a/core/css/header.css b/core/css/header.css
index f83ef451ce6..33eb7e25cc6 100644
--- a/core/css/header.css
+++ b/core/css/header.css
@@ -239,6 +239,8 @@
display: inline-block;
margin-right: 5px;
cursor: pointer;
+ height: 32px;
+ width: 32px;
}
#header .avatardiv img {
opacity: 1;
diff --git a/core/js/avatar.js b/core/js/avatar.js
index 6835f6ef0ac..8ff136d67ca 100644
--- a/core/js/avatar.js
+++ b/core/js/avatar.js
@@ -1,15 +1,5 @@
$(document).ready(function(){
if (OC.currentUser) {
- var callback = function() {
- // do not show display name on mobile when profile picture is present
- if($('#header .avatardiv').children().length > 0) {
- $('#header .avatardiv').addClass('avatardiv-shown');
- }
- };
-
- $('#header .avatardiv').avatar(
- OC.currentUser, 32, undefined, true, callback
- );
// Personal settings
$('#avatar .avatardiv').avatar(OC.currentUser, 128);
}
diff --git a/core/js/config.php b/core/js/config.php
index 6994f2ed8a2..52405725f23 100644
--- a/core/js/config.php
+++ b/core/js/config.php
@@ -39,7 +39,7 @@ $array = array(
"oc_isadmin" => OC_User::isAdminUser(OC_User::getUser()) ? 'true' : 'false',
"oc_webroot" => "\"".OC::$WEBROOT."\"",
"oc_appswebroots" => str_replace('\\/', '/', json_encode($apps_paths)), // Ugly unescape slashes waiting for better solution
- "datepickerFormatDate" => json_encode($l->l('jsdate', 'jsdate')),
+ "datepickerFormatDate" => json_encode($l->getDateFormat()),
"dayNames" => json_encode(
array(
(string)$l->t('Sunday'),
@@ -67,7 +67,7 @@ $array = array(
(string)$l->t('December')
)
),
- "firstDay" => json_encode($l->l('firstday', 'firstday')) ,
+ "firstDay" => json_encode($l->getFirstWeekDay()) ,
"oc_config" => json_encode(
array(
'session_lifetime' => min(\OCP\Config::getSystemValue('session_lifetime', ini_get('session.gc_maxlifetime')), ini_get('session.gc_maxlifetime')),
diff --git a/core/js/js.js b/core/js/js.js
index 566a3d4d8cd..94b78a2e9a9 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -967,6 +967,12 @@ function object(o) {
function initCore() {
/**
+ * Set users local to moment.js as soon as possible
+ */
+ moment.locale($('html').prop('lang'));
+
+
+ /**
* Calls the server periodically to ensure that session doesn't
* time out
*/
diff --git a/core/js/select2/select2_locale_zh-TW.js b/core/js/select2/select2_locale_zh-TW.js
index f072381faae..f072381faae 100755..100644
--- a/core/js/select2/select2_locale_zh-TW.js
+++ b/core/js/select2/select2_locale_zh-TW.js
diff --git a/core/js/share.js b/core/js/share.js
index 5632ecba971..d9ae0168129 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -444,7 +444,7 @@ OC.Share={
}
});
}
- $('#shareWith').autocomplete({minLength: 1, source: function(search, response) {
+ $('#shareWith').autocomplete({minLength: 2, delay: 750, source: function(search, response) {
var $loading = $('#dropdown .shareWithLoading');
$loading.removeClass('hidden');
$.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
@@ -1025,6 +1025,7 @@ $(document).ready(function() {
$loading.removeClass('hidden');
OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', permissions, itemSourceName).then(function() {
$loading.addClass('hidden');
+ $('#linkPassText').attr('placeholder', t('core', 'Choose a password for the public link'));
});
} else {
$('#linkPassText').focus();
diff --git a/core/js/snap.js b/core/js/snap.js
index 19942e866a9..19942e866a9 100755..100644
--- a/core/js/snap.js
+++ b/core/js/snap.js
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index 70eb05afd16..717eba17d6c 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Здрасти,\n\nсамо да те уведомя, че %s сподели %s с теб.\nРазгледай го: %s\n\n",
"The share will expire on %s." => "Споделянето ще изтече на %s.",
"Cheers!" => "Поздрави!",
+"Internal Server Error" => "Вътрешна системна грешка",
"The server encountered an internal error and was unable to complete your request." => "Сървърът се натъкна на вътрешна грешка и неуспя да завърши заявката.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Моля, свържи се със сървърния администратор ако тази грешка се появи отново, моля, включи техническите данни показани в доклада по-долу.",
"More details can be found in the server log." => "Допълнителна информация може да бъде открита в сървърните доклади.",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 79ac796e611..ac7642f6c86 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hej ty tam,\n\njen ti chci dát vědět, že %s sdílel %s s tebou.\nZobraz si to: %s\n\n",
"The share will expire on %s." => "Sdílení vyprší %s.",
"Cheers!" => "Ať slouží!",
+"Internal Server Error" => "Vnitřní chyba serveru",
"The server encountered an internal error and was unable to complete your request." => "Server zaznamenal interní chybu a nebyl schopen dokončit váš požadavek.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Kontaktujte prosím administrátora serveru, pokud se bude tato chyba opakovat. Připojte do svého hlášení níže zobrazené technické detaily.",
"More details can be found in the server log." => "Více podrobností k nalezení v serverovém logu.",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 8eace7d1662..ce415eca549 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hej med dig\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\nSe det her: %s\n\n",
"The share will expire on %s." => "Delingen vil udløbe om %s.",
"Cheers!" => "Hej!",
+"Internal Server Error" => "Intern serverfejl",
"The server encountered an internal error and was unable to complete your request." => "Servern stødte på en intern fejl og var ikke i stand til at fuldføre din forespørgsel.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Kontakt venligst serveradministratoren, hvis denne fejl gentager sig flere gange - medtag venligst de tekniske detaljer nedenfor i din rapport.",
"More details can be found in the server log." => "Flere detaljer kan fås i serverloggen.",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index ada6e70080d..5aa1dc14a9a 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -150,11 +150,12 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\nich wollte Dich nur wissen lassen, dass %s %s mit Dir teilt.\nSchaue es Dir an: %s\n\n",
"The share will expire on %s." => "Die Freigabe wird am %s ablaufen.",
"Cheers!" => "Hallo!",
+"Internal Server Error" => "Interner Server-Fehler",
"The server encountered an internal error and was unable to complete your request." => "Der Server hat einen internen Fehler und konnte Ihre Anfrage nicht vervollständigen.",
-"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Bitte wende Dich sich an den Serveradministrator, wenn dieser Fehler mehrfach auftritt, gebe bitte die, unten stehenden, technischen Details in Ihrem Bericht mit an.",
+"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Bitte wende Dich an den Serveradministrator, wenn dieser Fehler mehrfach auftritt. Füge deinem Bericht, bitte die untenstehenden technischen Details hinzu.",
"More details can be found in the server log." => "Weitere Details können im Serverprotokoll gefunden werden.",
"Technical details" => "Technische Details",
-"Remote Address: %s" => "Entfernte Adresse: %s",
+"Remote Address: %s" => "IP Adresse: %s",
"Request ID: %s" => "Anforderungskennung: %s",
"Code: %s" => "Code: %s",
"Message: %s" => "Nachricht: %s",
diff --git a/core/l10n/de_DE.php b/core/l10n/de_DE.php
index 84d15a31de7..f50b3d6b07b 100644
--- a/core/l10n/de_DE.php
+++ b/core/l10n/de_DE.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\n%s hat %s mit Ihnen geteilt.\nAnsehen: %s\n\n",
"The share will expire on %s." => "Die Freigabe wird am %s ablaufen.",
"Cheers!" => "Noch einen schönen Tag!",
+"Internal Server Error" => "Interner Server-Fehler",
"The server encountered an internal error and was unable to complete your request." => "Der Server hat einen internen Fehler und konnte Ihre Anfrage nicht vervollständigen.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Bitte wenden Sie sich an den Serveradministrator, wenn dieser Fehler mehrfach auftritt, geben Sie bitte die, unten stehenden, technischen Details in Ihrem Bericht mit an.",
"More details can be found in the server log." => "Weitere Details können im Serverprotokoll gefunden werden.",
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 462dd3bb829..c48ac9a4909 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -150,15 +150,18 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Γειά χαρά,\n\nαπλά σας ενημερώνω πως ο %s μοιράστηκε το %s με εσάς.\nΔείτε το: %s\n\n",
"The share will expire on %s." => "Ο διαμοιρασμός θα λήξει σε %s.",
"Cheers!" => "Χαιρετισμούς!",
+"Internal Server Error" => "Εσωτερικό Σφάλμα Διακομιστή",
"The server encountered an internal error and was unable to complete your request." => "Ο διακομιστής αντιμετώπισε ένα εσωτερικό σφάλμα και δεν μπόρεσε να ολοκληρώσει το αίτημά σας.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Παρακαλώ επικοινωνήστε με το διαχειριστή του διακομιστή, εάν αυτό το σφάλμα επανεμφανίζεται πολλές φορές, παρακαλούμε να συμπεριλάβετε τις τεχνικές λεπτομέρειες παρακάτω στην αναφορά σας.",
"More details can be found in the server log." => "Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο αρχείο καταγραφής του διακομιστή.",
"Technical details" => "Τεχνικές λεπτομέρειες",
"Remote Address: %s" => "Απομακρυσμένη Διεύθυνση: %s",
+"Request ID: %s" => "Αίτημα ID: %s",
"Code: %s" => "Κωδικός: %s",
"Message: %s" => "Μήνυμα: %s",
"File: %s" => "Αρχείο: %s",
"Line: %s" => "Γραμμή: %s",
+"Trace" => "Ανίχνευση",
"Security Warning" => "Προειδοποίηση Ασφαλείας",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Η PHP ειναι ευαλωτη στην NULL Byte επιθεση (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Παρακαλώ ενημερώστε την εγκατάσταση της PHP ώστε να χρησιμοποιήσετε το %s με ασφάλεια.",
diff --git a/core/l10n/en_GB.php b/core/l10n/en_GB.php
index 06d1e37ca77..831a0dd511f 100644
--- a/core/l10n/en_GB.php
+++ b/core/l10n/en_GB.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n",
"The share will expire on %s." => "The share will expire on %s.",
"Cheers!" => "Cheers!",
+"Internal Server Error" => "Internal Server Error",
"The server encountered an internal error and was unable to complete your request." => "The server encountered an internal error and was unable to complete your request.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.",
"More details can be found in the server log." => "More details can be found in the server log.",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index 7c720aa563e..c7ca3c1580d 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n",
"The share will expire on %s." => "El objeto dejará de ser compartido el %s.",
"Cheers!" => "¡Saludos!",
+"Internal Server Error" => "Error interno del servidor",
"The server encountered an internal error and was unable to complete your request." => "El servidor ha encontrado un error y no puede completar la solicitud.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Por favor contacte con el administrador del servidor si este error reaparece multiples veces. Por favor incluya los detalles tecnicos que se muestran acontinuación.",
"More details can be found in the server log." => "Mas detalles pueden verse en el log del servidor.",
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 4b9ac3f93b6..2aa5d95d18e 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -68,6 +68,7 @@ $TRANSLATIONS = array(
"Strong password" => "Väga hea parool",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Veebiserveri ei ole veel korralikult seadistatud võimaldamaks failide sünkroniseerimist, kuna WebDAV liides näib olevat mittetoimiv.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Serveril puudub toimiv internetiühendus. 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}",
"Share" => "Jaga",
@@ -87,6 +88,7 @@ $TRANSLATIONS = array(
"Send" => "Saada",
"Set expiration date" => "Määra aegumise kuupäev",
"Expiration date" => "Aegumise kuupäev",
+"Adding user..." => "Kasutaja lisamine...",
"group" => "grupp",
"Resharing is not allowed" => "Edasijagamine pole lubatud",
"Shared in {item} with {user}" => "Jagatud {item} kasutajaga {user}",
@@ -142,9 +144,24 @@ $TRANSLATIONS = array(
"Error favoriting" => "Viga lemmikuks lisamisel",
"Error unfavoriting" => "Viga lemmikutest eemaldamisel",
"Access forbidden" => "Ligipääs on keelatud",
+"File not found" => "Faili ei leitud",
+"The specified document has not been found on the server." => "Määratud dokumenti serverist ei leitud.",
+"You can click here to return to %s." => "%s tagasi minemiseks võid sa siia klikkida.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Tere,\n\n%s jagas sulle välja %s.\nVaata siit: %s\n\n",
"The share will expire on %s." => "Jagamine aegub %s.",
"Cheers!" => "Terekest!",
+"Internal Server Error" => "Serveri sisemine viga",
+"The server encountered an internal error and was unable to complete your request." => "Serveris tekkis sisemine tõrge ja sinu päringu täitmine ebaõnnestus.",
+"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Kui seda veateadet näidatakse mitu korda, siis palun võta ühendust serveri administraatoriga. Palun lisa alla aruandesse tehnilised üksikasjad.",
+"More details can be found in the server log." => "Lisainfot võib leida serveri logist.",
+"Technical details" => "Tehnilised andmed",
+"Remote Address: %s" => "Kaugaadress: %s",
+"Request ID: %s" => "Päringu ID: %s",
+"Code: %s" => "Kood: %s",
+"Message: %s" => "Sõnum: %s",
+"File: %s" => "Fail: %s",
+"Line: %s" => "Rida: %s",
+"Trace" => "Jälita",
"Security Warning" => "Turvahoiatus",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Sinu PHP versioon on haavatav NULL Baidi (CVE-2006-7243) rünnakuga.",
"Please update your PHP installation to use %s securely." => "Palun uuenda oma paigaldatud PHP-d tagamaks %s turvalisus.",
@@ -187,6 +204,8 @@ $TRANSLATIONS = array(
"The theme %s has been disabled." => "Teema %s on keelatud.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Enne jätkamist veendu, et andmebaas, seadete ning andmete kataloog on varundatud.",
"Start update" => "Käivita uuendus",
-"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:"
+"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Suurtel saitidel aegumise vältimiseks võid sa paigalduskaustas käivitada järgmise käsu:",
+"This %s instance is currently being updated, which may take a while." => "Seda %s ownCloud instantsi hetkel uuendatakse, see võib võtta veidi aega.",
+"This page will refresh itself when the %s instance is available again." => "Se leht laetakse uuesti, kui %s instantsi on uuesti saadaval."
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index 1b97801264a..e72bc5b8e7d 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -149,6 +149,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hei sinä!\n\n%s jakoi kohteen %s kanssasi.\nTutustu siihen: %s\n\n",
"The share will expire on %s." => "Jakaminen päättyy %s.",
"Cheers!" => "Kippis!",
+"Internal Server Error" => "Sisäinen palvelinvirhe",
"The server encountered an internal error and was unable to complete your request." => "Palvelin kohtasi sisäisen virheen, eikä pystynyt viimeistelmään pyyntöäsi.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Ota yhteys palvelimen ylläpitäjään, jos tämä virhe ilmenee useita kertoja. Lisää yhteydenottoosi alla olevat tekniset tiedot.",
"More details can be found in the server log." => "Lisätietoja on palvelimen lokitiedostossa.",
@@ -159,6 +160,7 @@ $TRANSLATIONS = array(
"Message: %s" => "Viesti: %s",
"File: %s" => "Tiedosto: %s",
"Line: %s" => "Rivi: %s",
+"Trace" => "Jälki",
"Security Warning" => "Turvallisuusvaroitus",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "PHP-asennuksesi on haavoittuvainen NULL Byte -hyökkäykselle (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Päivitä PHP-asennus varmistaaksesi, että %s on turvallinen käyttää.",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 861fb4d54f6..ea6736a1648 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nConsultez-le : %s\n",
"The share will expire on %s." => "Le partage expirera le %s.",
"Cheers!" => "À bientôt !",
+"Internal Server Error" => "Erreur interne du serveur",
"The server encountered an internal error and was unable to complete your request." => "Le serveur a rencontré une erreur interne et est incapable d'exécuter votre requête.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Veuillez contacter l'administrateur du serveur si cette erreur apparaît plusieurs fois. Veuillez joindre les détails techniques à votre rapport.",
"More details can be found in the server log." => "Le fichier journal du serveur peut fournir plus de renseignements.",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index f9d5f012e9a..b5e28333cc9 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -68,6 +68,7 @@ $TRANSLATIONS = array(
"Strong password" => "Erős jelszó",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok szinkronizálásához, mert a WebDAV-elérés úgy tűnik, nem működik.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "A kiszolgálónak nem működik az internetkapcsolata. Ez azt jelenti, hogy bizonyos funkciók nem fognak működni, mint pl. külső tárolók becsatolása, automatikus frissítési értesítések vagy más fejlesztők /3rd party/ által írt alkalmazások telepítése. Az állományok távolról történő elérése valamint e-mail értesítések küldése szintén lehet, hogy nem fog működni. Javasoljuk, hogy engedélyezze a kiszolgáló internetelérését, ha az összes funkciót szeretné használni.",
+"Error occurred while checking server setup" => "Hiba történt a szerver beállítások ellenőrzése közben",
"Shared" => "Megosztott",
"Shared with {recipients}" => "Megosztva ővelük: {recipients}",
"Share" => "Megosztás",
@@ -87,6 +88,7 @@ $TRANSLATIONS = array(
"Send" => "Küldjük el",
"Set expiration date" => "Legyen lejárati idő",
"Expiration date" => "A lejárati idő",
+"Adding user..." => "Felhasználó hozzáadása...",
"group" => "csoport",
"Resharing is not allowed" => "Ezt az állományt csak a tulajdonosa oszthatja meg másokkal",
"Shared in {item} with {user}" => "Megosztva {item}-ben {user}-rel",
@@ -142,9 +144,20 @@ $TRANSLATIONS = array(
"Error favoriting" => "Hiba a kedvencekhez adáskor",
"Error unfavoriting" => "Hiba a kedvencekből törléskor",
"Access forbidden" => "A hozzáférés nem engedélyezett",
+"File not found" => "Fájl nem található",
+"The specified document has not been found on the server." => "A meghatározott dokumentum nem található a szerveren.",
+"You can click here to return to %s." => "Ide kattintva visszatérhetsz ide: %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Üdv!\\n\n\\n\nÉrtesítjük, hogy %s megosztotta Önnel a következőt: %s.\\n\nItt lehet megnézni: %s\\n\n\\n",
"The share will expire on %s." => "A megosztás lejár ekkor %s",
"Cheers!" => "Üdv.",
+"Internal Server Error" => "Belső szerver hiba",
+"Technical details" => "Technikai adatok",
+"Remote Address: %s" => "Távoli cím: %s",
+"Request ID: %s" => "Kérelem azonosító: %s",
+"Code: %s" => "Kód: %s",
+"Message: %s" => "Üzenet: %s",
+"File: %s" => "Fájl: %s",
+"Line: %s" => "Sor: %s",
"Security Warning" => "Biztonsági figyelmeztetés",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Az Ön PHP verziója sebezhető a NULL bájtos támadással szemben (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Kérjük frissítse a telepített PHP csomagjait, hogy biztonságos legyen az %s szolgáltatása.",
diff --git a/core/l10n/id.php b/core/l10n/id.php
index d10a08ec70d..558bc161e06 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -4,8 +4,12 @@ $TRANSLATIONS = array(
"Turned on maintenance mode" => "Hidupkan mode perawatan",
"Turned off maintenance mode" => "Matikan mode perawatan",
"Updated database" => "Basis data terbaru",
-"No image or file provided" => "Tidak ada gambar atau file yang disediakan",
-"Unknown filetype" => "Tipe berkas tak dikenal",
+"Checked database schema update" => "Pembaruan skema basis data terperiksa",
+"Checked database schema update for apps" => "Pembaruan skema basis data terperiksa untuk aplikasi",
+"Updated \"%s\" to %s" => "Terbaru \"%s\" sampai %s",
+"Disabled incompatible apps: %s" => "Aplikasi tidak kompatibel yang dinonaktifkan: %s",
+"No image or file provided" => "Tidak ada gambar atau berkas yang disediakan",
+"Unknown filetype" => "Tipe berkas tidak dikenal",
"Invalid image" => "Gambar tidak sah",
"No temporary profile picture available, try again" => "Tidak ada gambar profil sementara yang tersedia, coba lagi",
"No crop data provided" => "Tidak ada data krop tersedia",
@@ -32,14 +36,20 @@ $TRANSLATIONS = array(
"File" => "Berkas",
"Folder" => "Folder",
"Image" => "gambar",
+"Audio" => "Audio",
"Saving..." => "Menyimpan...",
-"Reset password" => "Atur ulang sandi",
+"Couldn't send reset email. Please contact your administrator." => "Tidak dapat mengirim email setel ulang. Silakan hubungi administrator Anda.",
+"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." => "Sebuah tautan untuk setel ulang sandi Anda telah dikirim ke email Anda. Jika Anda tidak menerima dalam jangka waktu yang wajar, periksa folder spam/sampah Anda.<br>Jika tidak ada, tanyakan pada administrator Anda.",
+"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?",
+"I know what I'm doing" => "Saya tahu apa yang saya lakukan",
+"Reset password" => "Setel ulang sandi",
+"Password can not be changed. Please contact your administrator." => "Sandi tidak dapat diubah. Silakan hubungi administrator Anda",
"No" => "Tidak",
"Yes" => "Ya",
"Choose" => "Pilih",
"Error loading file picker template: {error}" => "Galat memuat templat berkas pemilih: {error}",
"Ok" => "Oke",
-"Error loading message template: {error}" => "Galat memuat templat pesan: {error}",
+"Error loading message template: {error}" => "Kesalahan memuat templat pesan: {error}",
"_{count} file conflict_::_{count} file conflicts_" => array("{count} berkas konflik"),
"One file conflict" => "Satu berkas konflik",
"New Files" => "Berkas Baru",
@@ -50,14 +60,17 @@ $TRANSLATIONS = array(
"Continue" => "Lanjutkan",
"(all selected)" => "(semua terpilih)",
"({count} selected)" => "({count} terpilih)",
-"Error loading file exists template" => "Galat memuat templat berkas yang sudah ada",
+"Error loading file exists template" => "Kesalahan memuat templat berkas yang sudah ada",
"Very weak password" => "Sandi sangat lemah",
"Weak password" => "Sandi lemah",
"So-so password" => "Sandi lumayan",
"Good password" => "Sandi baik",
"Strong password" => "Sandi kuat",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Web server Anda belum dikonfigurasikan dengan baik untuk mengizinkan sinkronisasi berkas karena tampaknya antarmuka WebDAV rusak.",
+"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Server ini tidak memiliki koneksi internet. Hal ini berarti bahwa beberapa fitur seperti mengaitkan penyimpanan eksternal, pemberitahuan tentang pembaruan atau instalasi aplikasi pihak ke-3 tidak akan bisa. Mengakses berkas dari remote dan mengirim email notifikasi juga tidak akan bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda menginginkan semua fitur.",
+"Error occurred while checking server setup" => "Kesalahan tidak terduga saat memeriksa setelan server",
"Shared" => "Dibagikan",
+"Shared with {recipients}" => "Dibagikan dengan {recipients}",
"Share" => "Bagikan",
"Error" => "Galat",
"Error while sharing" => "Galat ketika membagikan",
@@ -67,17 +80,21 @@ $TRANSLATIONS = array(
"Shared with you by {owner}" => "Dibagikan dengan anda oleh {owner}",
"Share with user or group …" => "Bagikan dengan pengguna atau grup ...",
"Share link" => "Bagikan tautan",
+"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",
"Password protect" => "Lindungi dengan sandi",
+"Choose a password for the public link" => "Tetapkan sandi untuk tautan publik",
"Allow Public Upload" => "Izinkan Unggahan Publik",
"Email link to person" => "Emailkan tautan ini ke orang",
"Send" => "Kirim",
"Set expiration date" => "Atur tanggal kedaluwarsa",
"Expiration date" => "Tanggal kedaluwarsa",
+"Adding user..." => "Menambahkan pengguna...",
"group" => "grup",
"Resharing is not allowed" => "Berbagi ulang tidak diizinkan",
"Shared in {item} with {user}" => "Dibagikan dalam {item} dengan {user}",
"Unshare" => "Batalkan berbagi",
"notify by email" => "notifikasi via email",
+"can share" => "dapat berbagi",
"can edit" => "dapat sunting",
"access control" => "kontrol akses",
"create" => "buat",
@@ -93,12 +110,17 @@ $TRANSLATIONS = array(
"Enter new" => "Masukkan baru",
"Delete" => "Hapus",
"Add" => "Tambah",
-"Edit tags" => "Sunting tag",
+"Edit tags" => "Sunting label",
"Error loading dialog template: {error}" => "Galat memuat templat dialog: {error}",
-"No tags selected for deletion." => "Tidak ada tag yang terpilih untuk dihapus.",
+"No tags selected for deletion." => "Tidak ada label yang dipilih untuk dihapus.",
+"Updating {productName} to version {version}, this may take a while." => "Memperbarui {productName} ke versi {version}, ini memerlukan waktu.",
"Please reload the page." => "Silakan muat ulang halaman.",
+"The update was unsuccessful." => "Pembaruan tidak berhasil",
"The update was successful. Redirecting you to ownCloud now." => "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.",
-"%s password reset" => "%s sandi diatur ulang",
+"Couldn't reset password because the token is invalid" => "Tidak dapat menyetel ulang sandi karena token tidak sah",
+"Couldn't send reset email. Please make sure your username is correct." => "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.",
+"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.",
+"%s password reset" => "%s sandi disetel ulang",
"Use the following link to reset your password: {link}" => "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
"You will receive a link to reset your password via Email." => "Anda akan menerima tautan penyetelan ulang sandi lewat Email.",
"Username" => "Nama pengguna",
@@ -106,6 +128,7 @@ $TRANSLATIONS = array(
"Yes, I really want to reset my password now" => "Ya, Saya sungguh ingin mengatur ulang sandi saya sekarang",
"Reset" => "Atur Ulang",
"New password" => "Sandi baru",
+"New Password" => "Sandi Baru",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!",
"For the best results, please consider using a GNU/Linux server instead." => "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ",
"Personal" => "Pribadi",
@@ -121,9 +144,24 @@ $TRANSLATIONS = array(
"Error favoriting" => "Galat saat memberikan sebagai favorit",
"Error unfavoriting" => "Galat saat menghapus sebagai favorit",
"Access forbidden" => "Akses ditolak",
+"File not found" => "Berkas tidak ditemukan",
+"The specified document has not been found on the server." => "Dokumen yang diminta tidak tersedia pada server.",
+"You can click here to return to %s." => "Anda dapat klik disini unutk kembali ke %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hai,\n\nhanya supaya anda tahu bahwa %s membagikan %s dengan anda.\nLihat: %s\n\n",
"The share will expire on %s." => "Pembagian akan berakhir pada %s.",
"Cheers!" => "Horee!",
+"Internal Server Error" => "Kesalahan Server Internal",
+"The server encountered an internal error and was unable to complete your request." => "Server mengalami kesalahan internal dan tidak dapat menyelesaikan permintaan Anda.",
+"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Silahkan hubungi administrator server jika kesalahan ini muncul kembali berulang kali, harap sertakan rincian teknis di bawah ini dalam laporan Anda.",
+"More details can be found in the server log." => "Rincian lebih lengkap dapat ditemukan di log server.",
+"Technical details" => "Rincian teknis",
+"Remote Address: %s" => "Alamat remote: %s",
+"Request ID: %s" => "ID Permintaan: %s",
+"Code: %s" => "Kode: %s",
+"Message: %s" => "Pesan: %s",
+"File: %s" => "Berkas: %s",
+"Line: %s" => "Baris: %s",
+"Trace" => "Jejak",
"Security Warning" => "Peringatan Keamanan",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Versi PHP Anda rentan terhadap serangan NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Silakan perbarui instalasi PHP anda untuk menggunakan %s dengan aman.",
@@ -134,23 +172,40 @@ $TRANSLATIONS = array(
"Storage & database" => "Penyimpanan & Basis data",
"Data folder" => "Folder data",
"Configure the database" => "Konfigurasikan basis data",
+"Only %s is available." => "Hanya %s yang tersedia",
"Database user" => "Pengguna basis data",
"Database password" => "Sandi basis data",
"Database name" => "Nama basis data",
"Database tablespace" => "Tablespace basis data",
"Database host" => "Host basis data",
+"SQLite will be used as database. For larger installations we recommend to change this." => "SQLite akan digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami merekomendasikan untuk mengubah setelan ini.",
"Finish setup" => "Selesaikan instalasi",
"Finishing …" => "Menyelesaikan ...",
+"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Aplikasi ini memerlukan JavaScript untuk beroperasi dengan benar. Mohon <a href=\"http://enable-javascript.com/\" target=\"_blank\">aktifkan JavaScript</a> dan muat ulang halaman.",
"%s is available. Get more information on how to update." => "%s tersedia. Dapatkan informasi lebih lanjut tentang cara memperbarui.",
"Log out" => "Keluar",
"Server side authentication failed!" => "Otentikasi dari sisi server gagal!",
"Please contact your administrator." => "Silahkan hubungi administrator anda.",
+"Forgot your password? Reset it!" => "Lupa sandi Anda? Setel ulang!",
"remember" => "selalu masuk",
"Log in" => "Masuk",
"Alternative Logins" => "Cara Alternatif untuk Masuk",
+"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>" => "Hai,<br><br>hanya memberi tahu jika %s membagikan <strong>%s</strong> dengan Anda.<br><a href=\"%s\">Lihat!</a><br><br>",
"This ownCloud instance is currently in single user mode." => "ownCloud ini sedang dalam mode pengguna tunggal.",
"This means only administrators can use the instance." => "Ini berarti hanya administrator yang dapat menggunakan ownCloud.",
"Contact your system administrator if this message persists or appeared unexpectedly." => "Hubungi administrator sistem anda jika pesan ini terus muncul atau muncul tiba-tiba.",
-"Thank you for your patience." => "Terima kasih atas kesabaran anda."
+"Thank you for your patience." => "Terima kasih atas kesabaran anda.",
+"You are accessing the server from an untrusted domain." => "Anda mengakses server dari domain yang tidak terpercaya.",
+"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Mohon hubungi administrator Anda. Jika Anda seorang administrator dari instansi ini, konfigurasikan pengaturan \"trusted_domain\" didalam config/config.php. Contoh konfigurasi talah disediakan didalam 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." => "Tergantung pada konfigurasi Anda, sebagai seorang administrator Anda kemungkinan dapat menggunakan tombol bawah untuk mempercayai domain ini.",
+"Add \"%s\" as trusted domain" => "tambahkan \"%s\" sebagai domain terpercaya",
+"%s will be updated to version %s." => "%s akan diperbarui ke versi %s.",
+"The following apps will be disabled:" => "Aplikasi berikut akan dinonaktifkan:",
+"The theme %s has been disabled." => "Tema %s telah dinonaktfkan.",
+"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Pastikan bahwa basis data, folder konfig, dan folder data telah dicadangkan sebelum melanjutkan.",
+"Start update" => "Jalankan pembaruan",
+"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Untuk menghindari waktu habis dengan instalasi yang lebih besar, Anda bisa menjalankan perintah berikut dari direktori instalasi Anda:",
+"This %s instance is currently being updated, which may take a while." => "Instansi %s ini sedang melakukan pembaruan, ini memerlukan beberapa waktu.",
+"This page will refresh itself when the %s instance is available again." => "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 67114a321bb..ae3fd59861f 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Ciao,\n\nvolevo informarti che %s ha condiviso %s con te.\nVedi: %s\n\n",
"The share will expire on %s." => "La condivisione scadrà il %s.",
"Cheers!" => "Saluti!",
+"Internal Server Error" => "Errore interno del server",
"The server encountered an internal error and was unable to complete your request." => "Il server ha riscontrato un errore interno e non è stato in grado di completare la tua richiesta.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Contatta l'amministratore del server se questo errore riappare più volte, includendo i dettagli tecnici sotto riportati nella tua segnalazione.",
"More details can be found in the server log." => "Ulteriori dettagli sono disponibili nel log del server.",
diff --git a/core/l10n/ja.php b/core/l10n/ja.php
index dedf3b759b4..450e3adc2e3 100644
--- a/core/l10n/ja.php
+++ b/core/l10n/ja.php
@@ -66,8 +66,8 @@ $TRANSLATIONS = array(
"So-so password" => "まずまずのパスワード",
"Good password" => "良好なパスワード",
"Strong password" => "強いパスワード",
-"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "WebDAVインターフェースに問題があると思われるため、WEBサーバーはまだファイルの同期を許可するよう適切に設定されていません。",
-"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティアプリといったいくつかの機能が使えません。また、リモート接続でのファイルアクセス、通知メールの送信と言った機能も利用できないかもしれません。全ての機能を利用したいのであれば、このサーバーからインターネットに接続できるようにすることをお勧めします。",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "WebDAVインターフェースに問題があると思われるため、Webサーバーはまだファイルの同期を許可するよう適切に設定されていません。",
+"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティアプリといったいくつかの機能が使えません。また、リモート接続でのファイルアクセス、通知メールの送信と言った機能も利用できないかもしれません。すべての機能を利用したい場合は、このサーバーがインターネット接続できるようにすることをお勧めします。",
"Error occurred while checking server setup" => "サーバー設定のチェック中にエラーが発生しました",
"Shared" => "共有中",
"Shared with {recipients}" => "{recipients} と共有",
@@ -88,7 +88,7 @@ $TRANSLATIONS = array(
"Send" => "送信",
"Set expiration date" => "有効期限を設定",
"Expiration date" => "有効期限",
-"Adding user..." => "ユーザー追加中...",
+"Adding user..." => "ユーザーを追加しています...",
"group" => "グループ",
"Resharing is not allowed" => "再共有は許可されていません",
"Shared in {item} with {user}" => "{item} 内で {user} と共有中",
diff --git a/core/l10n/l10n-de.php b/core/l10n/l10n-de.php
deleted file mode 100644
index 77d35af4936..00000000000
--- a/core/l10n/l10n-de.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$LOCALIZATIONS = array(
- 'jsdate' => 'dd.mm.yy',
- 'date' => '%d.%m.%Y',
- 'datetime' => '%d.%m.%Y %H:%M:%S',
- 'time' => '%H:%M:%S',
- 'firstday' => 0 );
diff --git a/core/l10n/l10n-en.php b/core/l10n/l10n-en.php
deleted file mode 100644
index 9ee748bee23..00000000000
--- a/core/l10n/l10n-en.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$LOCALIZATIONS = array(
- 'jsdate' => 'MM d, yy',
- 'date' => '%B %e, %Y',
- 'datetime' => '%B %e, %Y %H:%M',
- 'time' => '%H:%M:%S',
- 'firstday' => 0 );
diff --git a/core/l10n/l10n-es.php b/core/l10n/l10n-es.php
deleted file mode 100644
index 13db2ec5d4c..00000000000
--- a/core/l10n/l10n-es.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$LOCALIZATIONS = array(
- 'jsdate' => "d 'de' MM 'de' yy",
- 'date' => '%e de %B de %Y',
- 'datetime' => '%e de %B de %Y %H:%M',
- 'time' => '%H:%M:%S',
- 'firstday' => 1 );
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 581db3a6216..b6c3b5ce401 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Hallo,\n\n%s deelt %s met u.\nBekijk het hier: %s\n\n",
"The share will expire on %s." => "De share vervalt op %s.",
"Cheers!" => "Proficiat!",
+"Internal Server Error" => "Interne serverfout",
"The server encountered an internal error and was unable to complete your request." => "De server ontdekte een interne fout en kon uw aanvraag niet verder uitvoeren.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Neem contact op mer de serverbeheerder als deze fout meerdere keren optreedt en neem de onderstaande technische details op in uw melding.",
"More details can be found in the server log." => "Meer details in de serverlogging,",
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index 505dc24c10a..7d653d12dd4 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Olá,\n\ngostaria que você soubesse que %s compartilhou %s com você.\nVeja isto: %s\n\n",
"The share will expire on %s." => "O compartilhamento irá expirar em %s.",
"Cheers!" => "Saúde!",
+"Internal Server Error" => "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." => "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.",
"More details can be found in the server log." => "Mais detalhes podem ser encontrados no log do servidor.",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index fdd1cfb5513..229ecfbccb5 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -68,6 +68,7 @@ $TRANSLATIONS = array(
"Strong password" => "Password muito forte",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Este servidor ownCloud não tem uma ligação de internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos (dropbox, gdrive, etc), notificações sobre actualizções, ou a instalação de aplicações não irá funcionar. Sugerimos que active uma ligação à internet se pretender obter todas as funcionalidades do ownCloud.",
+"Error occurred while checking server setup" => "Ocorreu um erro durante a verificação da configuração do servidor",
"Shared" => "Partilhado",
"Shared with {recipients}" => "Partilhado com {recipients}",
"Share" => "Partilhar",
@@ -149,7 +150,10 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Olá,\n\napenas para informar que %s partilhou »%s« consigo.\nConsulte aqui: %s\n",
"The share will expire on %s." => "Esta partilha vai expirar em %s.",
"Cheers!" => "Parabéns!",
+"Internal Server Error" => "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." => "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
+"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Entra em contacto com o administrador do servidor se este erro aparecer várias vezes, inclui também os detalhes técnicos abaixo no seu contacto.",
+"More details can be found in the server log." => "Mais detalhes podem ser encontrados no log do servidor.",
"Technical details" => "Detalhes técnicos",
"Remote Address: %s" => "Endereço remoto: %s",
"Request ID: %s" => "ID do Pedido: %s",
@@ -157,6 +161,7 @@ $TRANSLATIONS = array(
"Message: %s" => "Mensagem: %s",
"File: %s" => "Ficheiro: %s",
"Line: %s" => "Linha: %s",
+"Trace" => "Trace",
"Security Warning" => "Aviso de Segurança",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "A sua versão do PHP é vulnerável ao ataque Byte Null (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Por favor atualize a sua versão PHP instalada para usar o %s com segurança.",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index b6a7b9206f2..20a8d9b8fc0 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -150,7 +150,9 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Pozdravljeni,\n\noseba %s vam je omogočila souporabo %s.\nVir si lahko ogledate: %s\n\n",
"The share will expire on %s." => "Povezava souporabe bo potekla %s.",
"Cheers!" => "Na zdravje!",
+"Internal Server Error" => "Notranja napaka strežnika",
"The server encountered an internal error and was unable to complete your request." => "Prišlo je do notranje napake, zato ni mogoče končati zahteve.",
+"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Stopite v stik s skrbnikom sistema, če se napaka pojavlja pogosto. V poročilo vključite tudi tehnične podatke v dnevniški datoteki.",
"More details can be found in the server log." => "Več podrobnosti je zabeleženih v dnevniku strežnika.",
"Technical details" => "Tehnične podrobnosti",
"Remote Address: %s" => "Oddaljen naslov: %s",
@@ -159,6 +161,7 @@ $TRANSLATIONS = array(
"Message: %s" => "Sporočilo: %s",
"File: %s" => "Datoteka: %s",
"Line: %s" => "Vrstica: %s",
+"Trace" => "Sledenje povezav",
"Security Warning" => "Varnostno opozorilo",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Uporabljena različica PHP je ranljiva za napad NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Za varno uporabo storitve %s, je treba posodobiti namestitev PHP",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index 50a7a798f13..7a1def5d18b 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -150,6 +150,7 @@ $TRANSLATIONS = array(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Merhaba,\n\nSadece %s sizinle %s paylaşımını yaptığını bildiriyoruz.\nBuradan bakabilirsiniz: %s\n\n",
"The share will expire on %s." => "Bu paylaşım %s tarihinde sona erecek.",
"Cheers!" => "Hoşça kalın!",
+"Internal Server Error" => "Dahili Sunucu Hatası",
"The server encountered an internal error and was unable to complete your request." => "Sunucu dahili bir hatayla karşılaştı ve isteğinizi tamamlayamadı.",
"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Eğer bu hata birden çok kez oluştuysa, lütfen sunucu yöneticisine aşağıdaki teknik ayrıntılar ile birlikte iletişime geçin.",
"More details can be found in the server log." => "Daha fazla ayrıntı sunucu günlüğünde bulanabilir.",
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index ce15a2b2e9a..591198fd7d9 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -4,6 +4,10 @@ $TRANSLATIONS = array(
"Turned on maintenance mode" => "Увімкнено захищений режим",
"Turned off maintenance mode" => "Вимкнено захищений режим",
"Updated database" => "Базу даних оновлено",
+"Checked database schema update" => "Перевірено оновлення схеми бази даних",
+"Checked database schema update for apps" => "Перевірено оновлення схеми бази даних для додатків",
+"Updated \"%s\" to %s" => "Оновлено \"%s\" до %s",
+"Disabled incompatible apps: %s" => "Вимкнені несумісні додатки: %s",
"No image or file provided" => "Немає наданого зображення або файлу",
"Unknown filetype" => "Невідомий тип файлу",
"Invalid image" => "Невірне зображення",
@@ -31,8 +35,15 @@ $TRANSLATIONS = array(
"Settings" => "Налаштування",
"File" => "Файл",
"Folder" => "Тека",
+"Image" => "Зображення",
+"Audio" => "Аудіо",
"Saving..." => "Зберігаю...",
+"Couldn't send reset email. Please contact your administrator." => "Не можу надіслати email для скидання. Будь ласка, зверніться до вашого адміністратора.",
+"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." => "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.",
+"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 /> Ви дійсно хочете продовжити?",
+"I know what I'm doing" => "Я знаю що роблю",
"Reset password" => "Скинути пароль",
+"Password can not be changed. Please contact your administrator." => "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора",
"No" => "Ні",
"Yes" => "Так",
"Choose" => "Обрати",
@@ -42,6 +53,7 @@ $TRANSLATIONS = array(
"_{count} file conflict_::_{count} file conflicts_" => array("{count} файловий конфлікт","{count} файлових конфліктів","{count} файлових конфліктів"),
"One file conflict" => "Один файловий конфлікт",
"New Files" => "Нових Файлів",
+"Already existing files" => "Файли що вже існують",
"Which files do you want to keep?" => "Які файли ви хочете залишити?",
"If you select both versions, the copied file will have a number added to its name." => "Якщо ви оберете обидві версії, скопійований файл буде мати номер, доданий у його ім'я.",
"Cancel" => "Відмінити",
@@ -51,10 +63,14 @@ $TRANSLATIONS = array(
"Error loading file exists template" => "Помилка при завантаженні файлу існуючого шаблону",
"Very weak password" => "Дуже слабкий пароль",
"Weak password" => "Слабкий пароль",
+"So-so password" => "Такий собі пароль",
"Good password" => "Добрий пароль",
"Strong password" => "Надійний пароль",
"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Ваш Web-сервер ще не налаштований належним чином для того, щоб дозволити синхронізацію файлів, через те що інтерфейс WebDAV, здається, зламаний.",
+"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Цей сервер не має під'єднання до Інтернету. Це означає, що деякі функції, такі як монтування зовнішніх сховищ, повідомлення про оновлення або встановлення допоміжних програм не будуть працювати. Віддалений доступ до файлів та надсилання повідомлень електронною поштою також може не працювати. Ми пропонуємо увімкнути під'єднання до Інтернету для даного сервера, якщо ви хочете мати всі можливості ownCloud.",
+"Error occurred while checking server setup" => "При перевірці налаштувань серверу сталася помилка",
"Shared" => "Опубліковано",
+"Shared with {recipients}" => "Опубліковано для {recipients}",
"Share" => "Поділитися",
"Error" => "Помилка",
"Error while sharing" => "Помилка під час публікації",
@@ -64,12 +80,15 @@ $TRANSLATIONS = array(
"Shared with you by {owner}" => "{owner} опублікував для Вас",
"Share with user or group …" => "Поділитися з користувачем або групою ...",
"Share link" => "Опублікувати посилання",
+"The public link will expire no later than {days} days after it is created" => "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення",
"Password protect" => "Захистити паролем",
+"Choose a password for the public link" => "Оберіть пароль для опублікованого посилання",
"Allow Public Upload" => "Дозволити Публічне Завантаження",
"Email link to person" => "Ел. пошта належить Пану",
"Send" => "Надіслати",
"Set expiration date" => "Встановити термін дії",
"Expiration date" => "Термін дії",
+"Adding user..." => "Додавання користувача...",
"group" => "група",
"Resharing is not allowed" => "Пере-публікація не дозволяється",
"Shared in {item} with {user}" => "Опубліковано {item} для {user}",
@@ -94,8 +113,13 @@ $TRANSLATIONS = array(
"Edit tags" => "Редагувати теги",
"Error loading dialog template: {error}" => "Помилка при завантаженні шаблону діалогу: {error}",
"No tags selected for deletion." => "Жодних тегів не обрано для видалення.",
+"Updating {productName} to version {version}, this may take a while." => "Оновлення {productName} до версії {version}, це може займати деякий час.",
"Please reload the page." => "Будь ласка, перезавантажте сторінку.",
+"The update was unsuccessful." => "Оновлення завершилось невдачею.",
"The update was successful. Redirecting you to ownCloud now." => "Оновлення виконалось успішно. Перенаправляємо вас на ownCloud.",
+"Couldn't reset password because the token is invalid" => "Неможливо скинути пароль, бо маркер є недійсним",
+"Couldn't send reset email. Please make sure your username is correct." => "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.",
+"Couldn't send reset email because there is no email address for this username. Please contact your administrator." => "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.",
"%s password reset" => "%s пароль скинуто",
"Use the following link to reset your password: {link}" => "Використовуйте наступне посилання для скидання пароля: {link}",
"You will receive a link to reset your password via Email." => "Ви отримаєте посилання для скидання вашого паролю на Ел. пошту.",
@@ -104,7 +128,9 @@ $TRANSLATIONS = array(
"Yes, I really want to reset my password now" => "Так, я справді бажаю скинути мій пароль зараз",
"Reset" => "Перевстановити",
"New password" => "Новий пароль",
+"New Password" => "Новий пароль",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X не підтримується і %s не буде коректно працювати на цій платформі. Випробовуєте на свій риск!",
+"For the best results, please consider using a GNU/Linux server instead." => "Для кращих результатів розгляньте можливість використання GNU/Linux серверу",
"Personal" => "Особисте",
"Users" => "Користувачі",
"Apps" => "Додатки",
@@ -118,9 +144,24 @@ $TRANSLATIONS = array(
"Error favoriting" => "Помилка позначення улюблених",
"Error unfavoriting" => "Помилка зняття позначки улюблених",
"Access forbidden" => "Доступ заборонено",
+"File not found" => "Файл не знайдено",
+"The specified document has not been found on the server." => "Не вдалось знайти вказаний документ на сервері.",
+"You can click here to return to %s." => "Ви можете натиснути тут для повернення до %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" => "Агов,\n\nпросто щоб ви знали, що %s поділився %s з вами.\nПодивіться: %s\n\n",
"The share will expire on %s." => "Доступ до спільних даних вичерпається %s.",
"Cheers!" => "Будьмо!",
+"Internal Server Error" => "Внутрішня помилка серверу",
+"The server encountered an internal error and was unable to complete your request." => "На сервері сталася внутрішня помилка, тому він не зміг виконати ваш запит.",
+"Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." => "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці нижче в звіті.",
+"More details can be found in the server log." => "Більше деталей може бути в журналі серверу.",
+"Technical details" => "Технічні деталі",
+"Remote Address: %s" => "Віддалена Адреса: %s",
+"Request ID: %s" => "Запит ID: %s",
+"Code: %s" => "Код: %s",
+"Message: %s" => "Повідомлення: %s",
+"File: %s" => "Файл: %s",
+"Line: %s" => "Рядок: %s",
+"Trace" => "Трасування",
"Security Warning" => "Попередження про небезпеку",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Ваша версія PHP вразлива для атак NULL Byte (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Будь ласка, оновіть вашу інсталяцію PHP для використання %s безпеки.",
@@ -128,19 +169,24 @@ $TRANSLATIONS = array(
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.",
"Create an <strong>admin account</strong>" => "Створити <strong>обліковий запис адміністратора</strong>",
"Password" => "Пароль",
+"Storage & database" => "Сховище і база даних",
"Data folder" => "Каталог даних",
"Configure the database" => "Налаштування бази даних",
+"Only %s is available." => "Тільки %s доступно.",
"Database user" => "Користувач бази даних",
"Database password" => "Пароль для бази даних",
"Database name" => "Назва бази даних",
"Database tablespace" => "Таблиця бази даних",
"Database host" => "Хост бази даних",
+"SQLite will be used as database. For larger installations we recommend to change this." => "Ви використовуете SQLite для вашої бази даних. Для більш навантажених серверів, ми рекомендуемо змінити це.",
"Finish setup" => "Завершити налаштування",
"Finishing …" => "Завершується ...",
+"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." => "Для цього додатка потрібна наявність Java для коректної роботи. Будь ласка, <a href=\"http://enable-javascript.com/\" target=\"_blank\"> увімкніть JavaScript </a> і перезавантажте сторінку.",
"%s is available. Get more information on how to update." => "%s доступний. Отримай більше інформації про те, як оновити.",
"Log out" => "Вихід",
"Server side authentication failed!" => "Помилка аутентифікації на боці Сервера !",
"Please contact your administrator." => "Будь ласка, зверніться до вашого Адміністратора.",
+"Forgot your password? Reset it!" => "Забули ваш пароль? Скиньте його!",
"remember" => "запам'ятати",
"Log in" => "Вхід",
"Alternative Logins" => "Альтернативні Логіни",
@@ -148,6 +194,18 @@ $TRANSLATIONS = array(
"This ownCloud instance is currently in single user mode." => "Цей екземпляр OwnCloud зараз працює в монопольному режимі одного користувача",
"This means only administrators can use the instance." => "Це означає, що лише адміністратори можуть використовувати цей екземпляр.",
"Contact your system administrator if this message persists or appeared unexpectedly." => "Зверніться до системного адміністратора, якщо це повідомлення зберігається або з'являєтья несподівано.",
-"Thank you for your patience." => "Дякуємо за ваше терпіння."
+"Thank you for your patience." => "Дякуємо за ваше терпіння.",
+"You are accessing the server from an untrusted domain." => "Ви зайшли на сервер з ненадійного домену.",
+"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." => "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходится в файлі 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." => "Залежно від конфігурації Ви як адміністратор можете додати цей домен у список довірених, використовуйте кнопку нижче.",
+"Add \"%s\" as trusted domain" => "Додати \"%s\" як довірений",
+"%s will be updated to version %s." => "%s буде оновлено до версії %s.",
+"The following apps will be disabled:" => "Наступні додатки будуть відключені:",
+"The theme %s has been disabled." => "Тему %s було вимкнено.",
+"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." => "Перш ніж продовжити, будь ласка, переконайтеся, що база даних, папка конфігурації і папка даних були дубльовані.",
+"Start update" => "Почати оновлення",
+"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" => "Щоб уникнути великих таймаутів з більш тяжкими встановленнями, ви можете виконати наступну команду відносно директорії встановлення:",
+"This %s instance is currently being updated, which may take a while." => "Цей %s екземпляр нині оновлюється, що може зайняти деякий час.",
+"This page will refresh itself when the %s instance is available again." => "Ця сторінка автоматично перезавантажиться коли екземпляр %s стане знову доступний."
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
diff --git a/core/setup/controller.php b/core/setup/controller.php
index 53f247e9769..f5f05348fd1 100644
--- a/core/setup/controller.php
+++ b/core/setup/controller.php
@@ -1,6 +1,7 @@
<?php
/**
* Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -8,7 +9,19 @@
namespace OC\Core\Setup;
+use OCP\IConfig;
+
class Controller {
+ /** @var \OCP\IConfig */
+ protected $config;
+
+ /**
+ * @param IConfig $config
+ */
+ function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
public function run($post) {
// Check for autosetup:
$post = $this->loadAutoConfig($post);
@@ -87,28 +100,10 @@ class Controller {
* in case of errors/warnings
*/
public function getSystemInfo() {
- $hasSQLite = class_exists('SQLite3');
- $hasMySQL = is_callable('mysql_connect');
- $hasPostgreSQL = is_callable('pg_connect');
- $hasOracle = is_callable('oci_connect');
- $hasMSSQL = is_callable('sqlsrv_connect');
- $databases = array();
- if ($hasSQLite) {
- $databases['sqlite'] = 'SQLite';
- }
- if ($hasMySQL) {
- $databases['mysql'] = 'MySQL/MariaDB';
- }
- if ($hasPostgreSQL) {
- $databases['pgsql'] = 'PostgreSQL';
- }
- if ($hasOracle) {
- $databases['oci'] = 'Oracle';
- }
- if ($hasMSSQL) {
- $databases['mssql'] = 'MS SQL';
- }
- $datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+ $setup = new \OC_Setup($this->config);
+ $databases = $setup->getSupportedDatabases();
+
+ $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT.'/data');
$vulnerableToNullByte = false;
if(@file_exists(__FILE__."\0Nullbyte")) { // Check if the used PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)
$vulnerableToNullByte = true;
@@ -119,25 +114,25 @@ class Controller {
// Create data directory to test whether the .htaccess works
// Notice that this is not necessarily the same data directory as the one
// that will effectively be used.
- @mkdir($datadir);
- if (is_dir($datadir) && is_writable($datadir)) {
+ @mkdir($dataDir);
+ $htAccessWorking = true;
+ if (is_dir($dataDir) && is_writable($dataDir)) {
// Protect data directory here, so we can test if the protection is working
\OC_Setup::protectDataDirectory();
try {
- $htaccessWorking = \OC_Util::isHtaccessWorking();
+ $htAccessWorking = \OC_Util::isHtaccessWorking();
} catch (\OC\HintException $e) {
$errors[] = array(
'error' => $e->getMessage(),
'hint' => $e->getHint()
);
- $htaccessWorking = false;
+ $htAccessWorking = false;
}
}
if (\OC_Util::runningOnMac()) {
$l10n = \OC::$server->getL10N('core');
- $themeName = \OC_Util::getTheme();
$theme = new \OC_Defaults();
$errors[] = array(
'error' => $l10n->t(
@@ -150,14 +145,14 @@ class Controller {
}
return array(
- 'hasSQLite' => $hasSQLite,
- 'hasMySQL' => $hasMySQL,
- 'hasPostgreSQL' => $hasPostgreSQL,
- 'hasOracle' => $hasOracle,
- 'hasMSSQL' => $hasMSSQL,
+ 'hasSQLite' => isset($databases['sqlite']),
+ 'hasMySQL' => isset($databases['mysql']),
+ 'hasPostgreSQL' => isset($databases['postgre']),
+ 'hasOracle' => isset($databases['oci']),
+ 'hasMSSQL' => isset($databases['mssql']),
'databases' => $databases,
- 'directory' => $datadir,
- 'htaccessWorking' => $htaccessWorking,
+ 'directory' => $dataDir,
+ 'htaccessWorking' => $htAccessWorking,
'vulnerableToNullByte' => $vulnerableToNullByte,
'errors' => $errors,
);
diff --git a/core/templates/exception.php b/core/templates/exception.php
index cf0e4c74825..144359a16d9 100644
--- a/core/templates/exception.php
+++ b/core/templates/exception.php
@@ -3,7 +3,7 @@
/** @var OC_L10N $l */
?>
<span class="error error-wide">
- <h2><strong><?php p('Internal Server Error') ?></strong></h2>
+ <h2><strong><?php p($l->t('Internal Server Error')) ?></strong></h2>
<p><?php p($l->t('The server encountered an internal error and was unable to complete your request.')) ?></p>
<p><?php p($l->t('Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.')) ?></p>
<p><?php p($l->t('More details can be found in the server log.')) ?></p>
diff --git a/core/templates/installation.php b/core/templates/installation.php
index b74d4caf107..9ef63dbfe8c 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -147,7 +147,9 @@
<?php endif; ?>
<?php endif; ?>
+ <?php if(!$_['dbIsSet'] OR count($_['errors']) > 0): ?>
<p id="sqliteInformation" class="info"><?php p($l->t('SQLite will be used as database. For larger installations we recommend to change this.'));?></p>
+ <?php endif ?>
<div class="buttons"><input type="submit" class="primary" value="<?php p($l->t( 'Finish setup' )); ?>" data-finishing="<?php p($l->t( 'Finishing …' )); ?>" /></div>
</form>
diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 963bf4cf545..3325bc9165e 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -1,10 +1,10 @@
<!DOCTYPE html>
-<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false"><![endif]-->
-<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false"><![endif]-->
-<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false"><!--<![endif]-->
+<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]-->
+<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
<head>
<title>
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index da40fd83ad8..0ad2ea4d807 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -1,10 +1,10 @@
<!DOCTYPE html>
-<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false"><![endif]-->
-<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false"><![endif]-->
-<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false"><!--<![endif]-->
+<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]-->
+<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
<head data-requesttoken="<?php p($_['requesttoken']); ?>">
<title>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index 9445175efcf..6164d16ac17 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -1,10 +1,10 @@
<!DOCTYPE html>
-<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false"><![endif]-->
-<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false"><![endif]-->
-<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false"><![endif]-->
-<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false"><!--<![endif]-->
+<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]-->
+<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]-->
+<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]-->
<head data-user="<?php p($_['user_uid']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>">
<title>
@@ -65,13 +65,17 @@
</a>
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
<div id="settings" class="svg">
- <span id="expand" tabindex="0" role="link">
+ <div id="expand" tabindex="0" role="link">
<?php if ($_['enableAvatars']): ?>
- <div class="avatardiv"></div>
+ <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown"'); } else { print_unescaped('" style="display: none"'); } ?>>
+ <?php if ($_['userAvatarSet']): ?>
+ <img src="<?php p(link_to('', 'index.php').'/avatar/'.$_['user_uid'].'/32?requesttoken='.$_['requesttoken']); ?>">
+ <?php endif; ?>
+ </div>
<?php endif; ?>
<span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
<img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" />
- </span>
+ </div>
<div id="expanddiv">
<ul>
<?php foreach($_['settingsnavigation'] as $entry):?>
diff --git a/cron.php b/cron.php
index e77cc885aba..bcbb298de55 100644
--- a/cron.php
+++ b/cron.php
@@ -71,8 +71,7 @@ try {
// Handle unexpected errors
register_shutdown_function('handleUnexpectedShutdown');
- // Delete temp folder
- OC_Helper::cleanTmpNoClean();
+ \OC::$server->getTempManager()->cleanOld();
// Exit if background jobs are disabled!
$appmode = OC_BackgroundJob::getExecutionType();
@@ -132,9 +131,9 @@ try {
// done!
TemporaryCronClass::$sent = true;
- // Log the successfull cron exec
- if (OC_Config::getValue('cron_log', true)) {
- OC_Appconfig::setValue('core', 'lastcron', time());
+ // Log the successful cron execution
+ if (\OC::$server->getConfig()->getSystemValue('cron_log', true)) {
+ \OC::$server->getAppConfig()->setValue('core', 'lastcron', time());
}
exit();
diff --git a/index.php b/index.php
index 88d5733cb37..88d5733cb37 100755..100644
--- a/index.php
+++ b/index.php
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 56bd81f5ed0..db83a13d3ef 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -53,23 +53,23 @@ msgstr ""
msgid "Disabled incompatible apps: %s"
msgstr ""
-#: avatar/controller.php:69
+#: avatar/controller.php:70
msgid "No image or file provided"
msgstr ""
-#: avatar/controller.php:86
+#: avatar/controller.php:87
msgid "Unknown filetype"
msgstr ""
-#: avatar/controller.php:90
+#: avatar/controller.php:91
msgid "Invalid image"
msgstr ""
-#: avatar/controller.php:120 avatar/controller.php:147
+#: avatar/controller.php:121 avatar/controller.php:148
msgid "No temporary profile picture available, try again"
msgstr ""
-#: avatar/controller.php:140
+#: avatar/controller.php:141
msgid "No crop data provided"
msgstr ""
@@ -327,12 +327,12 @@ msgstr ""
msgid "Share"
msgstr ""
-#: js/share.js:326 js/share.js:340 js/share.js:347 js/share.js:1076
+#: js/share.js:326 js/share.js:340 js/share.js:347 js/share.js:1077
#: templates/installation.php:10
msgid "Error"
msgstr ""
-#: js/share.js:328 js/share.js:1139
+#: js/share.js:328 js/share.js:1140
msgid "Error while sharing"
msgstr ""
@@ -369,7 +369,7 @@ msgstr ""
msgid "Password protect"
msgstr ""
-#: js/share.js:402
+#: js/share.js:402 js/share.js:1028
msgid "Choose a password for the public link"
msgstr ""
@@ -441,27 +441,27 @@ msgstr ""
msgid "delete"
msgstr ""
-#: js/share.js:1057
+#: js/share.js:1058
msgid "Password protected"
msgstr ""
-#: js/share.js:1076
+#: js/share.js:1077
msgid "Error unsetting expiration date"
msgstr ""
-#: js/share.js:1097
+#: js/share.js:1098
msgid "Error setting expiration date"
msgstr ""
-#: js/share.js:1126
+#: js/share.js:1127
msgid "Sending ..."
msgstr ""
-#: js/share.js:1137
+#: js/share.js:1138
msgid "Email sent"
msgstr ""
-#: js/share.js:1161
+#: js/share.js:1162
msgid "Warning"
msgstr ""
@@ -566,14 +566,14 @@ msgstr ""
msgid "New Password"
msgstr ""
-#: setup/controller.php:144
+#: setup/controller.php:139
#, php-format
msgid ""
"Mac OS X is not supported and %s will not work properly on this platform. "
"Use it at your own risk! "
msgstr ""
-#: setup/controller.php:148
+#: setup/controller.php:143
msgid "For the best results, please consider using a GNU/Linux server instead."
msgstr ""
@@ -585,7 +585,7 @@ msgstr ""
msgid "Users"
msgstr ""
-#: strings.php:7 templates/layout.user.php:58 templates/layout.user.php:127
+#: strings.php:7 templates/layout.user.php:58 templates/layout.user.php:131
msgid "Apps"
msgstr ""
@@ -662,6 +662,10 @@ msgstr ""
msgid "Cheers!"
msgstr ""
+#: templates/exception.php:6
+msgid "Internal Server Error"
+msgstr ""
+
#: templates/exception.php:7
msgid ""
"The server encountered an internal error and was unable to complete your "
@@ -788,17 +792,17 @@ msgstr ""
msgid "Database host"
msgstr ""
-#: templates/installation.php:150
+#: templates/installation.php:151
msgid ""
"SQLite will be used as database. For larger installations we recommend to "
"change this."
msgstr ""
-#: templates/installation.php:152
+#: templates/installation.php:154
msgid "Finish setup"
msgstr ""
-#: templates/installation.php:152
+#: templates/installation.php:154
msgid "Finishing …"
msgstr ""
@@ -815,7 +819,7 @@ msgstr ""
msgid "%s is available. Get more information on how to update."
msgstr ""
-#: templates/layout.user.php:89 templates/singleuser.user.php:8
+#: templates/layout.user.php:93 templates/singleuser.user.php:8
msgid "Log out"
msgstr ""
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 9db13ceae78..fae34af9b91 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -198,7 +198,7 @@ msgstr ""
msgid "URL cannot be empty"
msgstr ""
-#: js/file-upload.js:579 js/filelist.js:1308
+#: js/file-upload.js:579 js/filelist.js:1310
msgid "{new_name} already exists"
msgstr ""
@@ -238,59 +238,59 @@ msgstr ""
msgid "Rename"
msgstr ""
-#: js/filelist.js:698 js/filelist.js:1854
+#: js/filelist.js:700 js/filelist.js:1856
msgid "Pending"
msgstr ""
-#: js/filelist.js:1259
+#: js/filelist.js:1261
msgid "Error moving file."
msgstr ""
-#: js/filelist.js:1267
+#: js/filelist.js:1269
msgid "Error moving file"
msgstr ""
-#: js/filelist.js:1267
+#: js/filelist.js:1269
msgid "Error"
msgstr ""
-#: js/filelist.js:1356
+#: js/filelist.js:1358
msgid "Could not rename file"
msgstr ""
-#: js/filelist.js:1478
+#: js/filelist.js:1480
msgid "Error deleting file."
msgstr ""
-#: js/filelist.js:1580 templates/list.php:61
+#: js/filelist.js:1582 templates/list.php:61
msgid "Name"
msgstr ""
-#: js/filelist.js:1581 templates/list.php:72
+#: js/filelist.js:1583 templates/list.php:72
msgid "Size"
msgstr ""
-#: js/filelist.js:1582 templates/list.php:75
+#: js/filelist.js:1584 templates/list.php:75
msgid "Modified"
msgstr ""
-#: js/filelist.js:1592 js/filesummary.js:141 js/filesummary.js:168
+#: js/filelist.js:1594 js/filesummary.js:141 js/filesummary.js:168
msgid "%n folder"
msgid_plural "%n folders"
msgstr[0] ""
msgstr[1] ""
-#: js/filelist.js:1598 js/filesummary.js:142 js/filesummary.js:169
+#: js/filelist.js:1600 js/filesummary.js:142 js/filesummary.js:169
msgid "%n file"
msgid_plural "%n files"
msgstr[0] ""
msgstr[1] ""
-#: js/filelist.js:1655 templates/list.php:47
+#: js/filelist.js:1657 templates/list.php:47
msgid "You don’t have permission to upload or create files here"
msgstr ""
-#: js/filelist.js:1747 js/filelist.js:1786
+#: js/filelist.js:1749 js/filelist.js:1788
msgid "Uploading %n file"
msgid_plural "Uploading %n files"
msgstr[0] ""
@@ -340,7 +340,7 @@ msgstr ""
msgid "%s could not be renamed"
msgstr ""
-#: lib/helper.php:23 templates/list.php:25
+#: lib/helper.php:25 templates/list.php:25
#, php-format
msgid "Upload (max. %s)"
msgstr ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index b1e72576274..7f9ff02a5e2 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index baf301fe311..2c745157a39 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -223,15 +223,15 @@ msgstr ""
msgid "System"
msgstr ""
-#: js/settings.js:208
+#: js/settings.js:211
msgid "All users. Type to select user or group."
msgstr ""
-#: js/settings.js:291
+#: js/settings.js:294
msgid "(group)"
msgstr ""
-#: js/settings.js:467 js/settings.js:474
+#: js/settings.js:471 js/settings.js:478
msgid "Saved"
msgstr ""
@@ -239,25 +239,25 @@ msgstr ""
msgid "<b>Note:</b> "
msgstr ""
-#: lib/config.php:723
+#: lib/config.php:724
msgid " and "
msgstr ""
-#: lib/config.php:745
+#: lib/config.php:746
#, php-format
msgid ""
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting "
"of %s is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:747
+#: lib/config.php:748
#, php-format
msgid ""
"<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of "
"%s is not possible. Please ask your system administrator to install it."
msgstr ""
-#: lib/config.php:749
+#: lib/config.php:750
#, php-format
msgid ""
"<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please "
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index c11029d9613..8b413120455 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 98b003aa9cc..499fc47b987 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -39,7 +39,7 @@ msgstr ""
msgid "Error"
msgstr ""
-#: lib/trashbin.php:962 lib/trashbin.php:964
+#: lib/trashbin.php:980 lib/trashbin.php:982
msgid "restored"
msgstr ""
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 8392ced7028..d1ad5c42f3c 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 93c8a72b0f3..dd7839e7b0c 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:55-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,52 +33,56 @@ msgstr ""
msgid "See %s"
msgstr ""
-#: base.php:209 private/util.php:453
+#: base.php:209 private/util.php:458
#, php-format
msgid ""
"This can usually be fixed by %sgiving the webserver write access to the "
"config directory%s."
msgstr ""
-#: base.php:587
+#: base.php:595
msgid "Sample configuration detected"
msgstr ""
-#: base.php:588
+#: base.php:596
msgid ""
"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"
msgstr ""
-#: private/app.php:398
+#: private/app.php:410
msgid "Help"
msgstr ""
-#: private/app.php:411
+#: private/app.php:423
msgid "Personal"
msgstr ""
-#: private/app.php:422
+#: private/app.php:434
msgid "Settings"
msgstr ""
-#: private/app.php:434
+#: private/app.php:446
msgid "Users"
msgstr ""
-#: private/app.php:447
+#: private/app.php:459
msgid "Admin"
msgstr ""
-#: private/app.php:1150
+#: private/app.php:865 private/app.php:976
+msgid "Recommended"
+msgstr ""
+
+#: private/app.php:1158
#, php-format
msgid ""
"App \\\"%s\\\" can't be installed because it is not compatible with this "
"version of ownCloud."
msgstr ""
-#: private/app.php:1162
+#: private/app.php:1170
msgid "No app name specified"
msgstr ""
@@ -103,48 +107,48 @@ msgstr ""
msgid "Can't create app folder. Please fix permissions. %s"
msgstr ""
-#: private/installer.php:235
+#: private/installer.php:234
msgid "No source specified when installing app"
msgstr ""
-#: private/installer.php:243
+#: private/installer.php:242
msgid "No href specified when installing app from http"
msgstr ""
-#: private/installer.php:248
+#: private/installer.php:247
msgid "No path specified when installing app from local file"
msgstr ""
-#: private/installer.php:256
+#: private/installer.php:255
#, php-format
msgid "Archives of type %s are not supported"
msgstr ""
-#: private/installer.php:270
+#: private/installer.php:269
msgid "Failed to open archive when installing app"
msgstr ""
-#: private/installer.php:308
+#: private/installer.php:307
msgid "App does not provide an info.xml file"
msgstr ""
-#: private/installer.php:314
+#: private/installer.php:313
msgid "App can't be installed because of not allowed code in the App"
msgstr ""
-#: private/installer.php:320
+#: private/installer.php:319
msgid ""
"App can't be installed because it is not compatible with this version of "
"ownCloud"
msgstr ""
-#: private/installer.php:326
+#: private/installer.php:325
msgid ""
"App can't be installed because it contains the <shipped>true</shipped> tag "
"which is not allowed for non shipped apps"
msgstr ""
-#: private/installer.php:339
+#: private/installer.php:338
msgid ""
"App can't be installed because the version in info.xml/version is not the "
"same as the version reported from the app store"
@@ -254,15 +258,15 @@ msgstr ""
msgid "PostgreSQL username and/or password not valid"
msgstr ""
-#: private/setup.php:27
+#: private/setup.php:129
msgid "Set an admin username."
msgstr ""
-#: private/setup.php:30
+#: private/setup.php:132
msgid "Set an admin password."
msgstr ""
-#: private/setup.php:54
+#: private/setup.php:156
#, php-format
msgid "Can't create or write into the data directory %s"
msgstr ""
@@ -326,79 +330,79 @@ msgstr ""
msgid "Sharing %s failed, because sharing with links is not allowed"
msgstr ""
-#: private/share/share.php:679
+#: private/share/share.php:678
#, php-format
msgid "Share type %s is not valid for %s"
msgstr ""
-#: private/share/share.php:903
+#: private/share/share.php:902
#, php-format
msgid ""
"Setting permissions for %s failed, because the permissions exceed "
"permissions granted to %s"
msgstr ""
-#: private/share/share.php:964
+#: private/share/share.php:963
#, php-format
msgid "Setting permissions for %s failed, because the item was not found"
msgstr ""
-#: private/share/share.php:1002
+#: private/share/share.php:1001
#, php-format
msgid ""
"Cannot set expiration date. Shares cannot expire later than %s after they "
"have been shared"
msgstr ""
-#: private/share/share.php:1010
+#: private/share/share.php:1009
msgid "Cannot set expiration date. Expiration date is in the past"
msgstr ""
-#: private/share/share.php:1136
+#: private/share/share.php:1135
#, php-format
msgid "Sharing backend %s must implement the interface OCP\\Share_Backend"
msgstr ""
-#: private/share/share.php:1143
+#: private/share/share.php:1142
#, php-format
msgid "Sharing backend %s not found"
msgstr ""
-#: private/share/share.php:1149
+#: private/share/share.php:1148
#, php-format
msgid "Sharing backend for %s not found"
msgstr ""
-#: private/share/share.php:1841
+#: private/share/share.php:1891
#, php-format
msgid "Sharing %s failed, because the user %s is the original sharer"
msgstr ""
-#: private/share/share.php:1851
+#: private/share/share.php:1901
#, php-format
msgid ""
"Sharing %s failed, because the permissions exceed permissions granted to %s"
msgstr ""
-#: private/share/share.php:1877
+#: private/share/share.php:1927
#, php-format
msgid "Sharing %s failed, because resharing is not allowed"
msgstr ""
-#: private/share/share.php:1891
+#: private/share/share.php:1941
#, php-format
msgid ""
"Sharing %s failed, because the sharing backend for %s could not find its "
"source"
msgstr ""
-#: private/share/share.php:1905
+#: private/share/share.php:1955
#, php-format
msgid ""
"Sharing %s failed, because the file could not be found in the file cache"
msgstr ""
-#: private/tags.php:183
+#: private/tags.php:226
#, php-format
msgid "Could not find category \"%s\""
msgstr ""
@@ -469,144 +473,144 @@ msgstr ""
msgid "The username is already being used"
msgstr ""
-#: private/util.php:438
+#: private/util.php:443
msgid "No database drivers (sqlite, mysql, or postgresql) installed."
msgstr ""
-#: private/util.php:445
+#: private/util.php:450
#, php-format
msgid ""
"Permissions can usually be fixed by %sgiving the webserver write access to "
"the root directory%s."
msgstr ""
-#: private/util.php:452
+#: private/util.php:457
msgid "Cannot write into \"config\" directory"
msgstr ""
-#: private/util.php:466
+#: private/util.php:471
msgid "Cannot write into \"apps\" directory"
msgstr ""
-#: private/util.php:467
+#: private/util.php:472
#, php-format
msgid ""
"This can usually be fixed by %sgiving the webserver write access to the apps "
"directory%s or disabling the appstore in the config file."
msgstr ""
-#: private/util.php:482
+#: private/util.php:487
#, php-format
msgid "Cannot create \"data\" directory (%s)"
msgstr ""
-#: private/util.php:483
+#: private/util.php:488
#, php-format
msgid ""
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the "
"webserver write access to the root directory</a>."
msgstr ""
-#: private/util.php:500
+#: private/util.php:505
#, php-format
msgid "Setting locale to %s failed"
msgstr ""
-#: private/util.php:503
+#: private/util.php:508
msgid ""
"Please install one of these locales on your system and restart your "
"webserver."
msgstr ""
-#: private/util.php:532
+#: private/util.php:537
msgid "Please ask your server administrator to install the module."
msgstr ""
-#: private/util.php:552
+#: private/util.php:557
#, php-format
msgid "PHP module %s not installed."
msgstr ""
-#: private/util.php:560
+#: private/util.php:565
#, php-format
msgid "PHP %s or higher is required."
msgstr ""
-#: private/util.php:561
+#: private/util.php:566
msgid ""
"Please ask your server administrator to update PHP to the latest version. "
"Your PHP version is no longer supported by ownCloud and the PHP community."
msgstr ""
-#: private/util.php:572
+#: private/util.php:577
msgid ""
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work "
"properly."
msgstr ""
-#: private/util.php:573
+#: private/util.php:578
msgid ""
"PHP Safe Mode is a deprecated and mostly useless setting that should be "
"disabled. Please ask your server administrator to disable it in php.ini or "
"in your webserver config."
msgstr ""
-#: private/util.php:580
+#: private/util.php:585
msgid ""
"Magic Quotes is enabled. ownCloud requires that it is disabled to work "
"properly."
msgstr ""
-#: private/util.php:581
+#: private/util.php:586
msgid ""
"Magic Quotes is a deprecated and mostly useless setting that should be "
"disabled. Please ask your server administrator to disable it in php.ini or "
"in your webserver config."
msgstr ""
-#: private/util.php:595
+#: private/util.php:600
msgid "PHP modules have been installed, but they are still listed as missing?"
msgstr ""
-#: private/util.php:596
+#: private/util.php:601
msgid "Please ask your server administrator to restart the web server."
msgstr ""
-#: private/util.php:626
+#: private/util.php:631
msgid "PostgreSQL >= 9 required"
msgstr ""
-#: private/util.php:627
+#: private/util.php:632
msgid "Please upgrade your database version"
msgstr ""
-#: private/util.php:634
+#: private/util.php:639
msgid "Error occurred while checking PostgreSQL version"
msgstr ""
-#: private/util.php:635
+#: private/util.php:640
msgid ""
"Please make sure you have PostgreSQL >= 9 or check the logs for more "
"information about the error"
msgstr ""
-#: private/util.php:700
+#: private/util.php:705
msgid ""
"Please change the permissions to 0770 so that the directory cannot be listed "
"by other users."
msgstr ""
-#: private/util.php:709
+#: private/util.php:714
#, php-format
msgid "Data directory (%s) is readable by other users"
msgstr ""
-#: private/util.php:730
+#: private/util.php:735
#, php-format
msgid "Data directory (%s) is invalid"
msgstr ""
-#: private/util.php:731
+#: private/util.php:736
msgid ""
"Please check that the data directory contains a file \".ocdata\" in its root."
msgstr ""
diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot
index 827bb1b738b..d5836a75d3f 100644
--- a/l10n/templates/private.pot
+++ b/l10n/templates/private.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:55-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,34 +18,38 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: app.php:398
+#: app.php:410
msgid "Help"
msgstr ""
-#: app.php:411
+#: app.php:423
msgid "Personal"
msgstr ""
-#: app.php:422
+#: app.php:434
msgid "Settings"
msgstr ""
-#: app.php:434
+#: app.php:446
msgid "Users"
msgstr ""
-#: app.php:447
+#: app.php:459
msgid "Admin"
msgstr ""
-#: app.php:1150
+#: app.php:865 app.php:976
+msgid "Recommended"
+msgstr ""
+
+#: app.php:1158
#, php-format
msgid ""
"App \\\"%s\\\" can't be installed because it is not compatible with this "
"version of ownCloud."
msgstr ""
-#: app.php:1162
+#: app.php:1170
msgid "No app name specified"
msgstr ""
@@ -70,48 +74,48 @@ msgstr ""
msgid "Can't create app folder. Please fix permissions. %s"
msgstr ""
-#: installer.php:235
+#: installer.php:234
msgid "No source specified when installing app"
msgstr ""
-#: installer.php:243
+#: installer.php:242
msgid "No href specified when installing app from http"
msgstr ""
-#: installer.php:248
+#: installer.php:247
msgid "No path specified when installing app from local file"
msgstr ""
-#: installer.php:256
+#: installer.php:255
#, php-format
msgid "Archives of type %s are not supported"
msgstr ""
-#: installer.php:270
+#: installer.php:269
msgid "Failed to open archive when installing app"
msgstr ""
-#: installer.php:308
+#: installer.php:307
msgid "App does not provide an info.xml file"
msgstr ""
-#: installer.php:314
+#: installer.php:313
msgid "App can't be installed because of not allowed code in the App"
msgstr ""
-#: installer.php:320
+#: installer.php:319
msgid ""
"App can't be installed because it is not compatible with this version of "
"ownCloud"
msgstr ""
-#: installer.php:326
+#: installer.php:325
msgid ""
"App can't be installed because it contains the <shipped>true</shipped> tag "
"which is not allowed for non shipped apps"
msgstr ""
-#: installer.php:339
+#: installer.php:338
msgid ""
"App can't be installed because the version in info.xml/version is not the "
"same as the version reported from the app store"
@@ -214,15 +218,15 @@ msgstr ""
msgid "PostgreSQL username and/or password not valid"
msgstr ""
-#: setup.php:27
+#: setup.php:129
msgid "Set an admin username."
msgstr ""
-#: setup.php:30
+#: setup.php:132
msgid "Set an admin password."
msgstr ""
-#: setup.php:54
+#: setup.php:156
#, php-format
msgid "Can't create or write into the data directory %s"
msgstr ""
@@ -285,79 +289,79 @@ msgstr ""
msgid "Sharing %s failed, because sharing with links is not allowed"
msgstr ""
-#: share/share.php:679
+#: share/share.php:678
#, php-format
msgid "Share type %s is not valid for %s"
msgstr ""
-#: share/share.php:903
+#: share/share.php:902
#, php-format
msgid ""
"Setting permissions for %s failed, because the permissions exceed "
"permissions granted to %s"
msgstr ""
-#: share/share.php:964
+#: share/share.php:963
#, php-format
msgid "Setting permissions for %s failed, because the item was not found"
msgstr ""
-#: share/share.php:1002
+#: share/share.php:1001
#, php-format
msgid ""
"Cannot set expiration date. Shares cannot expire later than %s after they "
"have been shared"
msgstr ""
-#: share/share.php:1010
+#: share/share.php:1009
msgid "Cannot set expiration date. Expiration date is in the past"
msgstr ""
-#: share/share.php:1136
+#: share/share.php:1135
#, php-format
msgid "Sharing backend %s must implement the interface OCP\\Share_Backend"
msgstr ""
-#: share/share.php:1143
+#: share/share.php:1142
#, php-format
msgid "Sharing backend %s not found"
msgstr ""
-#: share/share.php:1149
+#: share/share.php:1148
#, php-format
msgid "Sharing backend for %s not found"
msgstr ""
-#: share/share.php:1841
+#: share/share.php:1891
#, php-format
msgid "Sharing %s failed, because the user %s is the original sharer"
msgstr ""
-#: share/share.php:1851
+#: share/share.php:1901
#, php-format
msgid ""
"Sharing %s failed, because the permissions exceed permissions granted to %s"
msgstr ""
-#: share/share.php:1877
+#: share/share.php:1927
#, php-format
msgid "Sharing %s failed, because resharing is not allowed"
msgstr ""
-#: share/share.php:1891
+#: share/share.php:1941
#, php-format
msgid ""
"Sharing %s failed, because the sharing backend for %s could not find its "
"source"
msgstr ""
-#: share/share.php:1905
+#: share/share.php:1955
#, php-format
msgid ""
"Sharing %s failed, because the file could not be found in the file cache"
msgstr ""
-#: tags.php:183
+#: tags.php:226
#, php-format
msgid "Could not find category \"%s\""
msgstr ""
@@ -428,151 +432,151 @@ msgstr ""
msgid "The username is already being used"
msgstr ""
-#: util.php:438
+#: util.php:443
msgid "No database drivers (sqlite, mysql, or postgresql) installed."
msgstr ""
-#: util.php:445
+#: util.php:450
#, php-format
msgid ""
"Permissions can usually be fixed by %sgiving the webserver write access to "
"the root directory%s."
msgstr ""
-#: util.php:452
+#: util.php:457
msgid "Cannot write into \"config\" directory"
msgstr ""
-#: util.php:453
+#: util.php:458
#, php-format
msgid ""
"This can usually be fixed by %sgiving the webserver write access to the "
"config directory%s."
msgstr ""
-#: util.php:466
+#: util.php:471
msgid "Cannot write into \"apps\" directory"
msgstr ""
-#: util.php:467
+#: util.php:472
#, php-format
msgid ""
"This can usually be fixed by %sgiving the webserver write access to the apps "
"directory%s or disabling the appstore in the config file."
msgstr ""
-#: util.php:482
+#: util.php:487
#, php-format
msgid "Cannot create \"data\" directory (%s)"
msgstr ""
-#: util.php:483
+#: util.php:488
#, php-format
msgid ""
"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the "
"webserver write access to the root directory</a>."
msgstr ""
-#: util.php:500
+#: util.php:505
#, php-format
msgid "Setting locale to %s failed"
msgstr ""
-#: util.php:503
+#: util.php:508
msgid ""
"Please install one of these locales on your system and restart your "
"webserver."
msgstr ""
-#: util.php:532
+#: util.php:537
msgid "Please ask your server administrator to install the module."
msgstr ""
-#: util.php:552
+#: util.php:557
#, php-format
msgid "PHP module %s not installed."
msgstr ""
-#: util.php:560
+#: util.php:565
#, php-format
msgid "PHP %s or higher is required."
msgstr ""
-#: util.php:561
+#: util.php:566
msgid ""
"Please ask your server administrator to update PHP to the latest version. "
"Your PHP version is no longer supported by ownCloud and the PHP community."
msgstr ""
-#: util.php:572
+#: util.php:577
msgid ""
"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work "
"properly."
msgstr ""
-#: util.php:573
+#: util.php:578
msgid ""
"PHP Safe Mode is a deprecated and mostly useless setting that should be "
"disabled. Please ask your server administrator to disable it in php.ini or "
"in your webserver config."
msgstr ""
-#: util.php:580
+#: util.php:585
msgid ""
"Magic Quotes is enabled. ownCloud requires that it is disabled to work "
"properly."
msgstr ""
-#: util.php:581
+#: util.php:586
msgid ""
"Magic Quotes is a deprecated and mostly useless setting that should be "
"disabled. Please ask your server administrator to disable it in php.ini or "
"in your webserver config."
msgstr ""
-#: util.php:595
+#: util.php:600
msgid "PHP modules have been installed, but they are still listed as missing?"
msgstr ""
-#: util.php:596
+#: util.php:601
msgid "Please ask your server administrator to restart the web server."
msgstr ""
-#: util.php:626
+#: util.php:631
msgid "PostgreSQL >= 9 required"
msgstr ""
-#: util.php:627
+#: util.php:632
msgid "Please upgrade your database version"
msgstr ""
-#: util.php:634
+#: util.php:639
msgid "Error occurred while checking PostgreSQL version"
msgstr ""
-#: util.php:635
+#: util.php:640
msgid ""
"Please make sure you have PostgreSQL >= 9 or check the logs for more "
"information about the error"
msgstr ""
-#: util.php:700
+#: util.php:705
msgid ""
"Please change the permissions to 0770 so that the directory cannot be listed "
"by other users."
msgstr ""
-#: util.php:709
+#: util.php:714
#, php-format
msgid "Data directory (%s) is readable by other users"
msgstr ""
-#: util.php:730
+#: util.php:735
#, php-format
msgid "Data directory (%s) is invalid"
msgstr ""
-#: util.php:731
+#: util.php:736
msgid ""
"Please check that the data directory contains a file \".ocdata\" in its root."
msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index c8777ac52ba..a176064439c 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:55-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,50 +17,16 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: admin/controller.php:66
-#, php-format
-msgid "Invalid value supplied for %s"
-msgstr ""
-
-#: admin/controller.php:73
-msgid "Saved"
-msgstr ""
-
-#: admin/controller.php:90
-msgid "test email settings"
-msgstr ""
-
-#: admin/controller.php:91
-msgid "If you received this email, the settings seem to be correct."
-msgstr ""
-
-#: admin/controller.php:94
-msgid ""
-"A problem occurred while sending the e-mail. Please revisit your settings."
-msgstr ""
-
-#: admin/controller.php:99
-msgid "Email sent"
-msgstr ""
-
-#: admin/controller.php:101
-msgid "You need to set your user email before being able to send test emails."
-msgstr ""
-
-#: admin/controller.php:116 templates/admin.php:342
-msgid "Send mode"
+#: ajax/apps/categories.php:14
+msgid "Enabled"
msgstr ""
-#: admin/controller.php:118 templates/admin.php:355 templates/personal.php:198
-msgid "Encryption"
+#: ajax/apps/categories.php:15
+msgid "Not enabled"
msgstr ""
-#: admin/controller.php:120 templates/admin.php:379
-msgid "Authentication method"
-msgstr ""
-
-#: ajax/apps/ocs.php:20
-msgid "Unable to load list from App Store"
+#: ajax/apps/categories.php:19
+msgid "Recommended"
msgstr ""
#: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17
@@ -160,7 +126,7 @@ msgstr ""
msgid "Unable to remove user from group %s"
msgstr ""
-#: ajax/updateapp.php:44
+#: ajax/updateapp.php:47
msgid "Couldn't update app."
msgstr ""
@@ -192,87 +158,89 @@ msgstr ""
msgid "Unable to change password"
msgstr ""
-#: js/admin.js:6
-msgid "Are you really sure you want add \"{domain}\" as trusted domain?"
+#: controller/mailsettingscontroller.php:103
+#: controller/mailsettingscontroller.php:121
+msgid "Saved"
msgstr ""
-#: js/admin.js:7
-msgid "Add trusted domain"
+#: controller/mailsettingscontroller.php:136
+msgid "test email settings"
msgstr ""
-#: js/admin.js:116
-msgid "Sending..."
+#: controller/mailsettingscontroller.php:137
+msgid "If you received this email, the settings seem to be correct."
msgstr ""
-#: js/apps.js:12 templates/apps.php:61
-msgid "All"
+#: controller/mailsettingscontroller.php:144
+msgid ""
+"A problem occurred while sending the email. Please revise your settings."
msgstr ""
-#: js/apps.js:50 templates/help.php:7
-msgid "User Documentation"
+#: controller/mailsettingscontroller.php:152
+msgid "Email sent"
msgstr ""
-#: js/apps.js:59
-msgid "Admin Documentation"
+#: controller/mailsettingscontroller.php:160
+msgid "You need to set your user email before being able to send test emails."
msgstr ""
-#: js/apps.js:87
-msgid "Update to {appversion}"
+#: js/admin.js:6
+msgid "Are you really sure you want add \"{domain}\" as trusted domain?"
msgstr ""
-#: js/apps.js:95
-msgid "Uninstall App"
+#: js/admin.js:7
+msgid "Add trusted domain"
msgstr ""
-#: js/apps.js:101 js/apps.js:156 js/apps.js:189
-msgid "Disable"
+#: js/admin.js:124
+msgid "Sending..."
msgstr ""
-#: js/apps.js:101 js/apps.js:165 js/apps.js:182 js/apps.js:213
-msgid "Enable"
+#: js/apps.js:17 templates/apps.php:62
+msgid "All"
msgstr ""
-#: js/apps.js:145
+#: js/apps.js:146
msgid "Please wait...."
msgstr ""
-#: js/apps.js:153 js/apps.js:154 js/apps.js:180
+#: js/apps.js:154 js/apps.js:155 js/apps.js:181
msgid "Error while disabling app"
msgstr ""
-#: js/apps.js:179 js/apps.js:208 js/apps.js:209
-msgid "Error while enabling app"
+#: js/apps.js:157 js/apps.js:190 templates/apps.php:58
+msgid "Disable"
msgstr ""
-#: js/apps.js:218
-msgid "Updating...."
+#: js/apps.js:165 js/apps.js:183 js/apps.js:220 templates/apps.php:64
+msgid "Enable"
msgstr ""
-#: js/apps.js:221
-msgid "Error while updating app"
+#: js/apps.js:180 js/apps.js:215 js/apps.js:216
+msgid "Error while enabling app"
msgstr ""
-#: js/apps.js:221 js/apps.js:234
-msgid "Error"
+#: js/apps.js:227
+msgid "Updating...."
msgstr ""
-#: js/apps.js:222 templates/apps.php:55
-msgid "Update"
+#: js/apps.js:231
+msgid "Error while updating app"
msgstr ""
-#: js/apps.js:225
+#: js/apps.js:235
msgid "Updated"
msgstr ""
-#: js/apps.js:231
+#: js/apps.js:243
msgid "Uninstalling ...."
msgstr ""
-#: js/apps.js:234
+#: js/apps.js:246
msgid "Error while uninstalling app"
msgstr ""
-#: js/apps.js:235 templates/apps.php:56
+#: js/apps.js:247
msgid "Uninstall"
msgstr ""
@@ -305,7 +273,7 @@ msgid "Valid until {date}"
msgstr ""
#: js/personal.js:333 js/personal.js:334 js/users/users.js:75
-#: templates/personal.php:179 templates/personal.php:180
+#: templates/personal.php:195 templates/personal.php:196
#: templates/users/part.grouplist.php:46 templates/users/part.userlist.php:108
msgid "Delete"
msgstr ""
@@ -324,7 +292,6 @@ msgstr ""
#: js/settings.js:27 js/users/users.js:49
#: templates/users/part.createuser.php:12 templates/users/part.userlist.php:10
-#: templates/users/part.userlist.php:41
msgid "Groups"
msgstr ""
@@ -348,9 +315,9 @@ msgstr ""
msgid "undo"
msgstr ""
-#: js/users/users.js:53 templates/users/part.userlist.php:12
+#: js/users/users.js:53 templates/users/part.userlist.php:41
#: templates/users/part.userlist.php:57
-msgid "Group Admin"
+msgid "no group"
msgstr ""
#: js/users/users.js:96 templates/users/part.userlist.php:98
@@ -385,62 +352,74 @@ msgstr ""
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:12
-msgid "Everything (fatal issues, errors, warnings, info, debug)"
+#: personal.php:107
+msgid "Personal Info"
+msgstr ""
+
+#: personal.php:132 templates/personal.php:173
+msgid "SSL root certificates"
+msgstr ""
+
+#: personal.php:134 templates/admin.php:357 templates/personal.php:214
+msgid "Encryption"
msgstr ""
#: templates/admin.php:13
-msgid "Info, warnings, errors and fatal issues"
+msgid "Everything (fatal issues, errors, warnings, info, debug)"
msgstr ""
#: templates/admin.php:14
-msgid "Warnings, errors and fatal issues"
+msgid "Info, warnings, errors and fatal issues"
msgstr ""
#: templates/admin.php:15
-msgid "Errors and fatal issues"
+msgid "Warnings, errors and fatal issues"
msgstr ""
#: templates/admin.php:16
+msgid "Errors and fatal issues"
+msgstr ""
+
+#: templates/admin.php:17
msgid "Fatal issues only"
msgstr ""
-#: templates/admin.php:20 templates/admin.php:27
+#: templates/admin.php:21 templates/admin.php:28
msgid "None"
msgstr ""
-#: templates/admin.php:21
+#: templates/admin.php:22
msgid "Login"
msgstr ""
-#: templates/admin.php:22
+#: templates/admin.php:23
msgid "Plain"
msgstr ""
-#: templates/admin.php:23
+#: templates/admin.php:24
msgid "NT LAN Manager"
msgstr ""
-#: templates/admin.php:28
+#: templates/admin.php:29
msgid "SSL"
msgstr ""
-#: templates/admin.php:29
+#: templates/admin.php:30
msgid "TLS"
msgstr ""
-#: templates/admin.php:51 templates/admin.php:65
+#: templates/admin.php:52 templates/admin.php:66
msgid "Security Warning"
msgstr ""
-#: templates/admin.php:54
+#: templates/admin.php:55
#, php-format
msgid ""
"You are accessing %s via HTTP. We strongly suggest you configure your server "
"to require using HTTPS instead."
msgstr ""
-#: templates/admin.php:68
+#: templates/admin.php:69
msgid ""
"Your data directory and your files are probably accessible from the "
"internet. The .htaccess file is not working. We strongly suggest that you "
@@ -449,91 +428,91 @@ msgid ""
"root."
msgstr ""
-#: templates/admin.php:79
+#: templates/admin.php:80
msgid "Setup Warning"
msgstr ""
-#: templates/admin.php:82
+#: templates/admin.php:83
msgid ""
"PHP is apparently setup to strip inline doc blocks. This will make several "
"core apps inaccessible."
msgstr ""
-#: templates/admin.php:83
+#: templates/admin.php:84
msgid ""
"This is probably caused by a cache/accelerator such as Zend OPcache or "
"eAccelerator."
msgstr ""
-#: templates/admin.php:94
+#: templates/admin.php:95
msgid "Database Performance Info"
msgstr ""
-#: templates/admin.php:97
+#: templates/admin.php:98
msgid ""
"SQLite is used as database. For larger installations we recommend to change "
"this. To migrate to another database use the command line tool: 'occ db:"
"convert-type'"
msgstr ""
-#: templates/admin.php:108
+#: templates/admin.php:109
msgid "Module 'fileinfo' missing"
msgstr ""
-#: templates/admin.php:111
+#: templates/admin.php:112
msgid ""
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this "
"module to get best results with mime-type detection."
msgstr ""
-#: templates/admin.php:122
+#: templates/admin.php:123
msgid "Your PHP version is outdated"
msgstr ""
-#: templates/admin.php:125
+#: templates/admin.php:126
msgid ""
"Your PHP version is outdated. We strongly recommend to update to 5.3.8 or "
"newer because older versions are known to be broken. It is possible that "
"this installation is not working correctly."
msgstr ""
-#: templates/admin.php:136
+#: templates/admin.php:137
msgid "PHP charset is not set to UTF-8"
msgstr ""
-#: templates/admin.php:139
+#: templates/admin.php:140
msgid ""
"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII "
"characters in file names. We highly recommend to change the value of "
"'default_charset' php.ini to 'UTF-8'."
msgstr ""
-#: templates/admin.php:150
+#: templates/admin.php:151
msgid "Locale not working"
msgstr ""
-#: templates/admin.php:155
+#: templates/admin.php:156
msgid "System locale can not be set to a one which supports UTF-8."
msgstr ""
-#: templates/admin.php:159
+#: templates/admin.php:160
msgid ""
"This means that there might be problems with certain characters in file "
"names."
msgstr ""
-#: templates/admin.php:163
+#: templates/admin.php:164
#, php-format
msgid ""
"We strongly suggest to install the required packages on your system to "
"support one of the following locales: %s."
msgstr ""
-#: templates/admin.php:174
+#: templates/admin.php:175
msgid "URL generation in notification emails"
msgstr ""
-#: templates/admin.php:177
+#: templates/admin.php:178
#, php-format
msgid ""
"If your installation is not installed in the root of the domain and uses "
@@ -542,198 +521,210 @@ msgid ""
"to the webroot path of your installation (Suggested: \"%s\")"
msgstr ""
-#: templates/admin.php:185
+#: templates/admin.php:186
msgid "Connectivity checks"
msgstr ""
-#: templates/admin.php:187
+#: templates/admin.php:188
msgid "No problems found"
msgstr ""
-#: templates/admin.php:191
+#: templates/admin.php:192
#, php-format
msgid "Please double check the <a href='%s'>installation guides</a>."
msgstr ""
-#: templates/admin.php:201
+#: templates/admin.php:202
msgid "Cron"
msgstr ""
-#: templates/admin.php:208
+#: templates/admin.php:209
#, php-format
msgid "Last cron was executed at %s."
msgstr ""
-#: templates/admin.php:211
+#: templates/admin.php:212
#, php-format
msgid ""
"Last cron was executed at %s. This is more than an hour ago, something seems "
"wrong."
msgstr ""
-#: templates/admin.php:215
+#: templates/admin.php:216
msgid "Cron was not executed yet!"
msgstr ""
-#: templates/admin.php:225
+#: templates/admin.php:226
msgid "Execute one task with each page loaded"
msgstr ""
-#: templates/admin.php:233
+#: templates/admin.php:234
msgid ""
"cron.php is registered at a webcron service to call cron.php every 15 "
"minutes over http."
msgstr ""
-#: templates/admin.php:241
+#: templates/admin.php:242
msgid "Use system's cron service to call the cron.php file every 15 minutes."
msgstr ""
-#: templates/admin.php:246
+#: templates/admin.php:247
msgid "Sharing"
msgstr ""
-#: templates/admin.php:250
+#: templates/admin.php:251
msgid "Allow apps to use the Share API"
msgstr ""
-#: templates/admin.php:255
+#: templates/admin.php:256
msgid "Allow users to share via link"
msgstr ""
-#: templates/admin.php:261
+#: templates/admin.php:262
msgid "Enforce password protection"
msgstr ""
-#: templates/admin.php:264
+#: templates/admin.php:265
msgid "Allow public uploads"
msgstr ""
-#: templates/admin.php:268
+#: templates/admin.php:269
msgid "Set default expiration date"
msgstr ""
-#: templates/admin.php:272
+#: templates/admin.php:273
msgid "Expire after "
msgstr ""
-#: templates/admin.php:275
+#: templates/admin.php:276
msgid "days"
msgstr ""
-#: templates/admin.php:278
+#: templates/admin.php:279
msgid "Enforce expiration date"
msgstr ""
-#: templates/admin.php:283
+#: templates/admin.php:284
msgid "Allow resharing"
msgstr ""
-#: templates/admin.php:288
+#: templates/admin.php:289
msgid "Restrict users to only share with users in their groups"
msgstr ""
-#: templates/admin.php:293
+#: templates/admin.php:294
msgid "Allow users to send mail notification for shared files"
msgstr ""
-#: templates/admin.php:298
+#: templates/admin.php:299
msgid "Exclude groups from sharing"
msgstr ""
-#: templates/admin.php:303
+#: templates/admin.php:304
msgid ""
"These groups will still be able to receive shares, but not to initiate them."
msgstr ""
-#: templates/admin.php:308
+#: templates/admin.php:309
msgid "Security"
msgstr ""
-#: templates/admin.php:319
+#: templates/admin.php:320
msgid "Enforce HTTPS"
msgstr ""
-#: templates/admin.php:321
+#: templates/admin.php:322
#, php-format
msgid "Forces the clients to connect to %s via an encrypted connection."
msgstr ""
-#: templates/admin.php:327
+#: templates/admin.php:328
#, php-format
msgid ""
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement."
msgstr ""
-#: templates/admin.php:337
+#: templates/admin.php:339
msgid "Email Server"
msgstr ""
-#: templates/admin.php:339
+#: templates/admin.php:341
msgid "This is used for sending out notifications."
msgstr ""
-#: templates/admin.php:370
+#: templates/admin.php:344
+msgid "Send mode"
+msgstr ""
+
+#: templates/admin.php:372
msgid "From address"
msgstr ""
-#: templates/admin.php:371
+#: templates/admin.php:373
msgid "mail"
msgstr ""
-#: templates/admin.php:392
+#: templates/admin.php:380
+msgid "Authentication method"
+msgstr ""
+
+#: templates/admin.php:393
msgid "Authentication required"
msgstr ""
-#: templates/admin.php:396
+#: templates/admin.php:397
msgid "Server address"
msgstr ""
-#: templates/admin.php:400
+#: templates/admin.php:401
msgid "Port"
msgstr ""
-#: templates/admin.php:405
+#: templates/admin.php:407
msgid "Credentials"
msgstr ""
-#: templates/admin.php:406
+#: templates/admin.php:408
msgid "SMTP Username"
msgstr ""
-#: templates/admin.php:409
+#: templates/admin.php:411
msgid "SMTP Password"
msgstr ""
-#: templates/admin.php:413
+#: templates/admin.php:412
+msgid "Store credentials"
+msgstr ""
+
+#: templates/admin.php:417
msgid "Test email settings"
msgstr ""
-#: templates/admin.php:414
+#: templates/admin.php:418
msgid "Send email"
msgstr ""
-#: templates/admin.php:419
+#: templates/admin.php:423
msgid "Log"
msgstr ""
-#: templates/admin.php:420
+#: templates/admin.php:424
msgid "Log level"
msgstr ""
-#: templates/admin.php:452
+#: templates/admin.php:456
msgid "More"
msgstr ""
-#: templates/admin.php:453
+#: templates/admin.php:457
msgid "Less"
msgstr ""
-#: templates/admin.php:459 templates/personal.php:247
+#: templates/admin.php:463 templates/personal.php:263
msgid "Version"
msgstr ""
-#: templates/admin.php:463 templates/personal.php:250
+#: templates/admin.php:467 templates/personal.php:266
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank"
"\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" "
@@ -742,39 +733,47 @@ msgid ""
"General Public License\">AGPL</abbr></a>."
msgstr ""
-#: templates/apps.php:14
-msgid "Add your App"
+#: templates/apps.php:8
+msgid "More apps"
+msgstr ""
+
+#: templates/apps.php:11
+msgid "Add your app"
msgstr ""
-#: templates/apps.php:31
-msgid "More Apps"
+#: templates/apps.php:24
+msgid "by"
msgstr ""
-#: templates/apps.php:38
-msgid "Select an App"
+#: templates/apps.php:26
+msgid "licensed"
msgstr ""
-#: templates/apps.php:43
+#: templates/apps.php:40
msgid "Documentation:"
msgstr ""
-#: templates/apps.php:49
-msgid "See application page at apps.owncloud.com"
+#: templates/apps.php:43 templates/help.php:7
+msgid "User Documentation"
msgstr ""
-#: templates/apps.php:51
-msgid "See application website"
+#: templates/apps.php:49
+msgid "Admin Documentation"
msgstr ""
-#: templates/apps.php:53
-msgid ""
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>"
+#: templates/apps.php:55
+#, php-format
+msgid "Update to %s"
msgstr ""
-#: templates/apps.php:59
+#: templates/apps.php:60
msgid "Enable only for specific groups"
msgstr ""
+#: templates/apps.php:67
+msgid "Uninstall App"
+msgstr ""
+
#: templates/help.php:13
msgid "Administrator Documentation"
msgstr ""
@@ -795,11 +794,11 @@ msgstr ""
msgid "Commercial Support"
msgstr ""
-#: templates/personal.php:11
+#: templates/personal.php:25
msgid "Get the apps to sync your files"
msgstr ""
-#: templates/personal.php:24
+#: templates/personal.php:38
msgid ""
"If you want to support the project\n"
"\t\t<a href=\"https://owncloud.org/contribute\"\n"
@@ -809,147 +808,143 @@ msgid ""
"\t\t\ttarget=\"_blank\">spread the word</a>!"
msgstr ""
-#: templates/personal.php:34
+#: templates/personal.php:48
msgid "Show First Run Wizard again"
msgstr ""
-#: templates/personal.php:43
+#: templates/personal.php:57
#, php-format
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
-#: templates/personal.php:54 templates/users/part.createuser.php:8
+#: templates/personal.php:68 templates/users/part.createuser.php:8
#: templates/users/part.userlist.php:9
msgid "Password"
msgstr ""
-#: templates/personal.php:55
+#: templates/personal.php:69
msgid "Your password was changed"
msgstr ""
-#: templates/personal.php:56
+#: templates/personal.php:70
msgid "Unable to change your password"
msgstr ""
-#: templates/personal.php:58
+#: templates/personal.php:72
msgid "Current password"
msgstr ""
-#: templates/personal.php:61
+#: templates/personal.php:75
msgid "New password"
msgstr ""
-#: templates/personal.php:65
+#: templates/personal.php:79
msgid "Change password"
msgstr ""
-#: templates/personal.php:77 templates/users/part.userlist.php:8
+#: templates/personal.php:91 templates/users/part.userlist.php:8
msgid "Full Name"
msgstr ""
-#: templates/personal.php:92
+#: templates/personal.php:106
msgid "Email"
msgstr ""
-#: templates/personal.php:94
+#: templates/personal.php:108
msgid "Your email address"
msgstr ""
-#: templates/personal.php:97
+#: templates/personal.php:111
msgid ""
"Fill in an email address to enable password recovery and receive "
"notifications"
msgstr ""
-#: templates/personal.php:105
+#: templates/personal.php:119
msgid "Profile picture"
msgstr ""
-#: templates/personal.php:110
+#: templates/personal.php:124
msgid "Upload new"
msgstr ""
-#: templates/personal.php:112
+#: templates/personal.php:126
msgid "Select new from Files"
msgstr ""
-#: templates/personal.php:113
+#: templates/personal.php:127
msgid "Remove image"
msgstr ""
-#: templates/personal.php:114
+#: templates/personal.php:128
msgid "Either png or jpg. Ideally square but you will be able to crop it."
msgstr ""
-#: templates/personal.php:116
+#: templates/personal.php:130
msgid "Your avatar is provided by your original account."
msgstr ""
-#: templates/personal.php:120
+#: templates/personal.php:134
msgid "Cancel"
msgstr ""
-#: templates/personal.php:121
+#: templates/personal.php:135
msgid "Choose as profile image"
msgstr ""
-#: templates/personal.php:127 templates/personal.php:128
+#: templates/personal.php:141 templates/personal.php:142
msgid "Language"
msgstr ""
-#: templates/personal.php:147
+#: templates/personal.php:161
msgid "Help translate"
msgstr ""
-#: templates/personal.php:157
-msgid "SSL root certificates"
-msgstr ""
-
-#: templates/personal.php:160
+#: templates/personal.php:176
msgid "Common Name"
msgstr ""
-#: templates/personal.php:161
+#: templates/personal.php:177
msgid "Valid until"
msgstr ""
-#: templates/personal.php:162
+#: templates/personal.php:178
msgid "Issued By"
msgstr ""
-#: templates/personal.php:171
+#: templates/personal.php:187
#, php-format
msgid "Valid until %s"
msgstr ""
-#: templates/personal.php:190
+#: templates/personal.php:206
msgid "Import Root Certificate"
msgstr ""
-#: templates/personal.php:204
+#: templates/personal.php:220
msgid "The encryption app is no longer enabled, please decrypt all your files"
msgstr ""
-#: templates/personal.php:210
+#: templates/personal.php:226
msgid "Log-in password"
msgstr ""
-#: templates/personal.php:215
+#: templates/personal.php:231
msgid "Decrypt all Files"
msgstr ""
-#: templates/personal.php:225
+#: templates/personal.php:241
msgid ""
"Your encryption keys are moved to a backup location. If something went wrong "
"you can restore the keys. Only delete them permanently if you are sure that "
"all files are decrypted correctly."
msgstr ""
-#: templates/personal.php:229
+#: templates/personal.php:245
msgid "Restore Encryption Keys"
msgstr ""
-#: templates/personal.php:233
+#: templates/personal.php:249
msgid "Delete Encryption Keys"
msgstr ""
@@ -1020,6 +1015,10 @@ msgstr ""
msgid "Username"
msgstr ""
+#: templates/users/part.userlist.php:12
+msgid "Group Admin for"
+msgstr ""
+
#: templates/users/part.userlist.php:14
msgid "Quota"
msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index e4c0491d364..edc4143ba34 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -91,55 +91,55 @@ msgstr ""
msgid "Error"
msgstr ""
-#: js/settings.js:244
+#: js/settings.js:266
msgid "Please specify a Base DN"
msgstr ""
-#: js/settings.js:245
+#: js/settings.js:267
msgid "Could not determine Base DN"
msgstr ""
-#: js/settings.js:276
+#: js/settings.js:299
msgid "Please specify the port"
msgstr ""
-#: js/settings.js:792
+#: js/settings.js:933
msgid "Configuration OK"
msgstr ""
-#: js/settings.js:801
+#: js/settings.js:942
msgid "Configuration incorrect"
msgstr ""
-#: js/settings.js:810
+#: js/settings.js:951
msgid "Configuration incomplete"
msgstr ""
-#: js/settings.js:827 js/settings.js:836
+#: js/settings.js:968 js/settings.js:977
msgid "Select groups"
msgstr ""
-#: js/settings.js:830 js/settings.js:839
+#: js/settings.js:971 js/settings.js:980
msgid "Select object classes"
msgstr ""
-#: js/settings.js:833
+#: js/settings.js:974
msgid "Select attributes"
msgstr ""
-#: js/settings.js:860
+#: js/settings.js:1002
msgid "Connection test succeeded"
msgstr ""
-#: js/settings.js:867
+#: js/settings.js:1009
msgid "Connection test failed"
msgstr ""
-#: js/settings.js:876
+#: js/settings.js:1018
msgid "Do you really want to delete the current Server Configuration?"
msgstr ""
-#: js/settings.js:877
+#: js/settings.js:1019
msgid "Confirm Deletion"
msgstr ""
@@ -157,27 +157,27 @@ msgid_plural "%s users found"
msgstr[0] ""
msgstr[1] ""
-#: lib/wizard.php:394 lib/wizard.php:1130
+#: lib/wizard.php:394 lib/wizard.php:1131
msgid "Could not find the desired feature"
msgstr ""
-#: lib/wizard.php:937 lib/wizard.php:949
+#: lib/wizard.php:938 lib/wizard.php:950
msgid "Invalid Host"
msgstr ""
-#: settings.php:52
+#: settings.php:53
msgid "Server"
msgstr ""
-#: settings.php:53
+#: settings.php:54
msgid "User Filter"
msgstr ""
-#: settings.php:54
+#: settings.php:55
msgid "Login Filter"
msgstr ""
-#: settings.php:55
+#: settings.php:56
msgid "Group Filter"
msgstr ""
@@ -189,7 +189,7 @@ msgstr ""
msgid "Test Configuration"
msgstr ""
-#: templates/part.settingcontrols.php:10 templates/part.wizardcontrols.php:14
+#: templates/part.settingcontrols.php:10 templates/part.wizardcontrols.php:15
msgid "Help"
msgstr ""
@@ -226,7 +226,12 @@ msgid ""
"The filter specifies which LDAP groups shall have access to the %s instance."
msgstr ""
-#: templates/part.wizard-groupfilter.php:38
+#: templates/part.wizard-groupfilter.php:34
+#: templates/part.wizard-userfilter.php:34
+msgid "Test Filter"
+msgstr ""
+
+#: templates/part.wizard-groupfilter.php:41
msgid "groups found"
msgstr ""
@@ -309,6 +314,16 @@ msgstr ""
msgid "You can specify Base DN for users and groups in the Advanced tab"
msgstr ""
+#: templates/part.wizard-server.php:75
+msgid ""
+"Avoids automatic LDAP requests. Better for bigger setups, but requires some "
+"LDAP knowledge."
+msgstr ""
+
+#: templates/part.wizard-server.php:78
+msgid "Manually enter LDAP filters (recommended for large directories)"
+msgstr ""
+
#: templates/part.wizard-userfilter.php:4
#, php-format
msgid "Limit %s access to users meeting these criteria:"
@@ -320,15 +335,19 @@ msgid ""
"The filter specifies which LDAP users shall have access to the %s instance."
msgstr ""
-#: templates/part.wizard-userfilter.php:38
+#: templates/part.wizard-userfilter.php:41
msgid "users found"
msgstr ""
-#: templates/part.wizardcontrols.php:5
+#: templates/part.wizardcontrols.php:2
+msgid "Saving"
+msgstr ""
+
+#: templates/part.wizardcontrols.php:6
msgid "Back"
msgstr ""
-#: templates/part.wizardcontrols.php:8
+#: templates/part.wizardcontrols.php:9
msgid "Continue"
msgstr ""
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 5d6cccfe60e..eb6a314a5a6 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud Core 6.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-10-15 01:54-0400\n"
+"POT-Creation-Date: 2014-10-28 01:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/lib/base.php b/lib/base.php
index 0086531e523..4a5f4e77a59 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -444,6 +444,7 @@ class OC {
public static function init() {
// register autoloader
+ $loaderStart = microtime(true);
require_once __DIR__ . '/autoloader.php';
self::$loader = new \OC\Autoloader();
self::$loader->registerPrefix('Doctrine\\Common', 'doctrine/common/lib');
@@ -453,6 +454,13 @@ class OC {
self::$loader->registerPrefix('Patchwork', '3rdparty');
self::$loader->registerPrefix('Pimple', '3rdparty/Pimple');
spl_autoload_register(array(self::$loader, 'load'));
+ $loaderEnd = microtime(true);
+
+ // setup the basic server
+ self::initPaths();
+ self::$server = new \OC\Server();
+ \OC::$server->getEventLogger()->log('autoloader', 'Autoloader', $loaderStart, $loaderEnd);
+ \OC::$server->getEventLogger()->start('boot', 'Initialize');
// set some stuff
//ob_start();
@@ -469,7 +477,6 @@ class OC {
if (get_magic_quotes_gpc() == 1) {
ini_set('magic_quotes_runtime', 0);
}
-
//try to configure php to enable big file uploads.
//this doesn´t work always depending on the webserver and php configuration.
//Let´s try to overwrite some defaults anyways
@@ -485,9 +492,9 @@ class OC {
@ini_set('file_uploads', '50');
self::handleAuthHeaders();
- self::initPaths();
self::registerAutoloaderCache();
+
OC_Util::isSetLocaleWorking();
// setup 3rdparty autoloader
@@ -516,9 +523,8 @@ class OC {
stream_wrapper_register('quota', 'OC\Files\Stream\Quota');
stream_wrapper_register('oc', 'OC\Files\Stream\OC');
- // setup the basic server
- self::$server = new \OC\Server();
+ \OC::$server->getEventLogger()->start('init_session', 'Initialize session');
self::initTemplateEngine();
OC_App::loadApps(array('session'));
if (self::$CLI) {
@@ -526,6 +532,7 @@ class OC {
} else {
self::initSession();
}
+ \OC::$server->getEventLogger()->end('init_session');
self::checkConfig();
self::checkInstalled();
self::checkSSL();
@@ -570,10 +577,11 @@ class OC {
self::registerLocalAddressBook();
//make sure temporary files are cleaned up
- register_shutdown_function(array('OC_Helper', 'cleanTmp'));
+ $tmpManager = \OC::$server->getTempManager();
+ register_shutdown_function(array($tmpManager, 'clean'));
if (OC_Config::getValue('installed', false) && !self::checkUpgrade(false)) {
- if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
+ if (\OC::$server->getAppConfig()->getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
OC_Util::addScript('backgroundjobs');
}
}
@@ -612,6 +620,7 @@ class OC {
exit();
}
+ \OC::$server->getEventLogger()->end('boot');
}
private static function registerLocalAddressBook() {
@@ -701,13 +710,14 @@ class OC {
* Handle the request
*/
public static function handleRequest() {
+ \OC::$server->getEventLogger()->start('handle_request', 'Handle request');
// load all the classpaths from the enabled apps so they are available
// in the routing files of each app
OC::loadAppClassPaths();
// Check if ownCloud is installed or in maintenance (update) mode
if (!OC_Config::getValue('installed', false)) {
- $controller = new OC\Core\Setup\Controller();
+ $controller = new OC\Core\Setup\Controller(\OC::$server->getConfig());
$controller->run($_POST);
exit();
}
diff --git a/lib/l10n/bg_BG.php b/lib/l10n/bg_BG.php
index 3b247952ede..caa7a558d57 100644
--- a/lib/l10n/bg_BG.php
+++ b/lib/l10n/bg_BG.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Настройки",
"Users" => "Потребители",
"Admin" => "Админ",
+"Recommended" => "Препоръчано",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Приложението \\\"%s\\\" не може да бъде инсталирано, защото не е съвместимо с тази версия на ownCloud.",
"No app name specified" => "Не е зададено име на преложението",
"Unknown filetype" => "Непознат тип файл.",
diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php
index 244fc53fbf3..a8143d4e431 100644
--- a/lib/l10n/cs_CZ.php
+++ b/lib/l10n/cs_CZ.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Nastavení",
"Users" => "Uživatelé",
"Admin" => "Administrace",
+"Recommended" => "Doporučené",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Aplikace \\\"%s\\\" nemůže být nainstalována, protože není kompatibilní s touto verzí ownCloud.",
"No app name specified" => "Nebyl zadan název aplikace",
"Unknown filetype" => "Neznámý typ souboru",
diff --git a/lib/l10n/da.php b/lib/l10n/da.php
index 1568d72e3a6..8ae7d847a09 100644
--- a/lib/l10n/da.php
+++ b/lib/l10n/da.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Indstillinger",
"Users" => "Brugere",
"Admin" => "Admin",
+"Recommended" => "Anbefalet",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "App'en \\\"%s\\\" kan ikke installeres, da den ikke er kompatible med denne version af ownCloud.",
"No app name specified" => "Intet app-navn angivet",
"Unknown filetype" => "Ukendt filtype",
diff --git a/lib/l10n/de.php b/lib/l10n/de.php
index e2586d286ed..ac359e34f52 100644
--- a/lib/l10n/de.php
+++ b/lib/l10n/de.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Einstellungen",
"Users" => "Benutzer",
"Admin" => "Administration",
+"Recommended" => "Empfohlen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Applikation \\\"%s\\\" kann nicht installiert werden, da sie mit dieser ownCloud Version nicht kompatibel ist.",
"No app name specified" => "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" => "Unbekannter Dateityp",
diff --git a/lib/l10n/de_DE.php b/lib/l10n/de_DE.php
index 98f74eee4d5..006f28d6066 100644
--- a/lib/l10n/de_DE.php
+++ b/lib/l10n/de_DE.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Einstellungen",
"Users" => "Benutzer",
"Admin" => "Administrator",
+"Recommended" => "Empfohlen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "App »%s« kann nicht installiert werden, da sie mit dieser ownCloud-Version nicht kompatibel ist.",
"No app name specified" => "Es wurde kein Applikation-Name angegeben",
"Unknown filetype" => "Unbekannter Dateityp",
diff --git a/lib/l10n/el.php b/lib/l10n/el.php
index 83ad773a23b..2814328efdb 100644
--- a/lib/l10n/el.php
+++ b/lib/l10n/el.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Ρυθμίσεις",
"Users" => "Χρήστες",
"Admin" => "Διαχείριση",
+"Recommended" => "Προτείνεται",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Η εφαρμογή \"%s\" δεν μπορεί να εγκατασταθεί επειδή δεν είναι συμβατή με αυτή την έκδοση του ownCloud.",
"No app name specified" => "Δεν προδιορίστηκε όνομα εφαρμογής",
"Unknown filetype" => "Άγνωστος τύπος αρχείου",
@@ -50,6 +51,7 @@ $TRANSLATIONS = array(
"PostgreSQL username and/or password not valid" => "Μη έγκυρος χρήστης και/ή συνθηματικό της PostgreSQL",
"Set an admin username." => "Εισάγετε όνομα χρήστη διαχειριστή.",
"Set an admin password." => "Εισάγετε συνθηματικό διαχειριστή.",
+"Can't create or write into the data directory %s" => "Αδύνατη η δημιουργία ή συγγραφή στον κατάλογο δεδομένων %s",
"%s shared »%s« with you" => "Ο %s διαμοιράστηκε μαζί σας το »%s«",
"Sharing %s failed, because the file does not exist" => "Ο διαμοιρασμός του %s απέτυχε, γιατί το αρχείο δεν υπάρχει",
"You are not allowed to share %s" => "Δεν επιτρέπεται να διαμοιράσετε τον πόρο %s",
diff --git a/lib/l10n/en_GB.php b/lib/l10n/en_GB.php
index da3cacfce98..5a3ba3a6c54 100644
--- a/lib/l10n/en_GB.php
+++ b/lib/l10n/en_GB.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Settings",
"Users" => "Users",
"Admin" => "Admin",
+"Recommended" => "Recommended",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud.",
"No app name specified" => "No app name specified",
"Unknown filetype" => "Unknown filetype",
diff --git a/lib/l10n/es.php b/lib/l10n/es.php
index 04253fc7b0c..553ccd519fd 100644
--- a/lib/l10n/es.php
+++ b/lib/l10n/es.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Ajustes",
"Users" => "Usuarios",
"Admin" => "Administración",
+"Recommended" => "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "La aplicación \\\"%s\\\" no se puede instalar porque no es compatible con esta versión de ownCloud.",
"No app name specified" => "No se ha especificado nombre de la aplicación",
"Unknown filetype" => "Tipo de archivo desconocido",
diff --git a/lib/l10n/et_EE.php b/lib/l10n/et_EE.php
index 8adc51dd118..5dd406ac399 100644
--- a/lib/l10n/et_EE.php
+++ b/lib/l10n/et_EE.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Seaded",
"Users" => "Kasutajad",
"Admin" => "Admin",
+"Recommended" => "Soovitatud",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Rakendit \\\"%s\\\" ei saa paigaldada, kuna see pole ühilduv selle ownCloud versiooniga.",
"No app name specified" => "Ühegi rakendi nime pole määratletud",
"Unknown filetype" => "Tundmatu failitüüp",
@@ -50,6 +51,7 @@ $TRANSLATIONS = array(
"PostgreSQL username and/or password not valid" => "PostgreSQL kasutajatunnus ja/või parool pole õiged",
"Set an admin username." => "Määra admin kasutajanimi.",
"Set an admin password." => "Määra admini parool.",
+"Can't create or write into the data directory %s" => "Ei suuda luua või kirjutada andmete kataloogi %s",
"%s shared »%s« with you" => "%s jagas sinuga »%s«",
"Sharing %s failed, because the file does not exist" => "%s jagamine ebaõnnestus, kuna faili pole olemas",
"You are not allowed to share %s" => "Sul pole lubatud %s jagada",
diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php
index b002ab02495..5c9a6442c76 100644
--- a/lib/l10n/fi_FI.php
+++ b/lib/l10n/fi_FI.php
@@ -10,6 +10,7 @@ $TRANSLATIONS = array(
"Settings" => "Asetukset",
"Users" => "Käyttäjät",
"Admin" => "Ylläpito",
+"Recommended" => "Suositeltu",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Sovellusta \\\"%s\\\" ei voi asentaa, koska se ei ole yhteensopiva tämän ownCloud-version kanssa.",
"No app name specified" => "Sovelluksen nimeä ei määritelty",
"Unknown filetype" => "Tuntematon tiedostotyyppi",
diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php
index 7c26c973f6f..8a61c6ff8ad 100644
--- a/lib/l10n/fr.php
+++ b/lib/l10n/fr.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Paramètres",
"Users" => "Utilisateurs",
"Admin" => "Administration",
+"Recommended" => "Recommandée",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "L'application \\\"%s\\\" ne peut pas être installée car elle n'est pas compatible avec cette version de ownCloud.",
"No app name specified" => "Aucun nom d'application spécifié",
"Unknown filetype" => "Type de fichier inconnu",
diff --git a/lib/l10n/hu_HU.php b/lib/l10n/hu_HU.php
index 146f3a2bc5d..60d5897df6c 100644
--- a/lib/l10n/hu_HU.php
+++ b/lib/l10n/hu_HU.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Beállítások",
"Users" => "Felhasználók",
"Admin" => "Adminsztráció",
+"Recommended" => "Ajánlott",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => " \\\"%s\\\" alkalmazás nem telepíthető, mert nem kompatibilis az ownCloud jelen változatával.",
"No app name specified" => "Nincs az alkalmazás név megadva.",
"Unknown filetype" => "Ismeretlen file tipús",
@@ -50,6 +51,7 @@ $TRANSLATIONS = array(
"PostgreSQL username and/or password not valid" => "A PostgreSQL felhasználói név és/vagy jelszó érvénytelen",
"Set an admin username." => "Állítson be egy felhasználói nevet az adminisztrációhoz.",
"Set an admin password." => "Állítson be egy jelszót az adminisztrációhoz.",
+"Can't create or write into the data directory %s" => "Nem sikerült létrehozni vagy irni a \"data\" könyvtárba %s",
"%s shared »%s« with you" => "%s megosztotta Önnel ezt: »%s«",
"Sharing %s failed, because the file does not exist" => "%s megosztása sikertelen, mert a fájl nem létezik",
"You are not allowed to share %s" => "Önnek nincs jogosultsága %s megosztására",
diff --git a/lib/l10n/id.php b/lib/l10n/id.php
index 796772d410f..9e2e9282f7d 100644
--- a/lib/l10n/id.php
+++ b/lib/l10n/id.php
@@ -1,10 +1,18 @@
<?php
$TRANSLATIONS = array(
+"Cannot write into \"config\" directory!" => "Tidak dapat menulis kedalam direktori \"config\"!",
+"This can usually be fixed by giving the webserver write access to the config directory" => "Hal ini biasanya dapat diperbaiki dengan memberikan akses tulis bagi situs web ke direktori config",
+"See %s" => "Lihat %s",
+"This can usually be fixed by %sgiving the webserver write access to the config directory%s." => "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori config.",
+"Sample configuration detected" => "Konfigurasi sampel ditemukan",
+"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" => "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php",
"Help" => "Bantuan",
"Personal" => "Pribadi",
"Settings" => "Pengaturan",
"Users" => "Pengguna",
"Admin" => "Admin",
+"Recommended" => "Direkomendasikan",
+"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Aplikasi \\\"%s\\\" tidak dapat diinstal karena tidak kompatibel denga versi ownCloud ini.",
"No app name specified" => "Tidak ada nama apl yang ditentukan",
"Unknown filetype" => "Tipe berkas tak dikenal",
"Invalid image" => "Gambar tidak sah",
@@ -24,20 +32,46 @@ $TRANSLATIONS = array(
"Application is not enabled" => "Aplikasi tidak diaktifkan",
"Authentication error" => "Galat saat otentikasi",
"Token expired. Please reload page." => "Token sudah kedaluwarsa. Silakan muat ulang halaman.",
+"Unknown user" => "Pengguna tidak dikenal",
"%s enter the database username." => "%s masukkan nama pengguna basis data.",
"%s enter the database name." => "%s masukkan nama basis data.",
"%s you may not use dots in the database name" => "%s anda tidak boleh menggunakan karakter titik pada nama basis data",
"MS SQL username and/or password not valid: %s" => "Nama pengguna dan/atau sandi MySQL tidak sah: %s",
"You need to enter either an existing account or the administrator." => "Anda harus memasukkan akun yang sudah ada atau administrator.",
-"DB Error: \"%s\"" => "Galat Basis Data: \"%s\"",
+"MySQL/MariaDB username and/or password not valid" => "Nama pengguna dan/atau sandi MySQL/MariaDB tidak sah",
+"DB Error: \"%s\"" => "Kesalahan Basis Data: \"%s\"",
"Offending command was: \"%s\"" => "Perintah yang bermasalah: \"%s\"",
+"MySQL/MariaDB user '%s'@'localhost' exists already." => "'%s'@'localhost' pengguna MySQL/MariaDB sudah ada.",
+"Drop this user from MySQL/MariaDB" => "Drop pengguna ini dari MySQL/MariaDB",
+"MySQL/MariaDB user '%s'@'%%' already exists" => "'%s'@'%%' pengguna MySQL/MariaDB sudah ada.",
+"Drop this user from MySQL/MariaDB." => "Drop pengguna ini dari MySQL/MariaDB.",
"Oracle connection could not be established" => "Koneksi Oracle tidak dapat dibuat",
"Oracle username and/or password not valid" => "Nama pengguna dan/atau sandi Oracle tidak sah",
"Offending command was: \"%s\", name: %s, password: %s" => "Perintah yang bermasalah: \"%s\", nama pengguna: %s, sandi: %s",
"PostgreSQL username and/or password not valid" => "Nama pengguna dan/atau sandi PostgreSQL tidak valid",
-"Set an admin username." => "Atur nama pengguna admin.",
-"Set an admin password." => "Atur sandi admin.",
+"Set an admin username." => "Tetapkan nama pengguna admin.",
+"Set an admin password." => "Tetapkan sandi admin.",
+"Can't create or write into the data directory %s" => "Tidak dapat membuat atau menulis kedalam direktori data %s",
"%s shared »%s« with you" => "%s membagikan »%s« dengan anda",
+"Sharing %s failed, because the file does not exist" => "Gagal membagikan %s, karena berkas tidak ada",
+"You are not allowed to share %s" => "Anda tidak diizinkan untuk membagikan %s",
+"Sharing %s failed, because the user %s is the item owner" => "Gagal membagikan %s, karena pengguna %s adalah pemilik item",
+"Sharing %s failed, because the user %s does not exist" => "Gagal membagikan %s, karena pengguna %s tidak ada",
+"Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" => "Gagal membagikan %s, karena pengguna %s bukan merupakan anggota dari grup yang %s ikuti",
+"Sharing %s failed, because this item is already shared with %s" => "Gagal membagkan %s, karena item ini sudah dibagikan dengan %s",
+"Sharing %s failed, because the group %s does not exist" => "Gagal membagikan %s, karena grup %s tidak ada",
+"Sharing %s failed, because %s is not a member of the group %s" => "Gagal membagikan %s, karena %s bukan anggota dari grup %s",
+"You need to provide a password to create a public link, only protected links are allowed" => "Anda perlu memberikan sandi untuk membuat tautan publik, hanya tautan yang terlindungi yang diizinkan",
+"Sharing %s failed, because sharing with links is not allowed" => "Gagal membagikan %s, karena berbag dengan tautan tidak diizinkan",
+"Share type %s is not valid for %s" => "Barbagi tipe %s tidak sah untuk %s",
+"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" => "Pengaturan perizinan untuk %s gagal, karena karena izin melebihi izin yang diberikan untuk %s",
+"Setting permissions for %s failed, because the item was not found" => "Pengaturan perizinan untuk %s gagal, karena item tidak ditemukan",
+"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" => "Tidak dapat menyetel tanggal kadaluarsa. Pembagian tidak dapat kadaluarsa lebih lambat dari %s setelah mereka dibagikan.",
+"Cannot set expiration date. Expiration date is in the past" => "Tidak dapat menyetel tanggal kadaluarsa. Tanggal kadaluarsa dimasa lalu",
+"Sharing %s failed, because the user %s is the original sharer" => "Gagal berbagi %s. karena pengguna %s adalah yang membagikan pertama",
+"Sharing %s failed, because the permissions exceed permissions granted to %s" => "Gagal membagikan %s, karena izin melebihi izin yang diberikan untuk %s",
+"Sharing %s failed, because resharing is not allowed" => "Gagal berbagi %s, karena membagikan ulang tidak diizinkan",
+"Sharing %s failed, because the file could not be found in the file cache" => "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache",
"Could not find category \"%s\"" => "Tidak menemukan kategori \"%s\"",
"seconds ago" => "beberapa detik yang lalu",
"_%n minute ago_::_%n minutes ago_" => array("%n menit yang lalu"),
@@ -49,7 +83,34 @@ $TRANSLATIONS = array(
"_%n month ago_::_%n months ago_" => array("%n bulan yang lalu"),
"last year" => "tahun kemarin",
"years ago" => "beberapa tahun lalu",
+"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" => "Hanya karakter berikut yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-\"",
"A valid username must be provided" => "Tuliskan nama pengguna yang valid",
-"A valid password must be provided" => "Tuliskan sandi yang valid"
+"A valid password must be provided" => "Tuliskan sandi yang valid",
+"The username is already being used" => "Nama pengguna ini telah digunakan",
+"No database drivers (sqlite, mysql, or postgresql) installed." => "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.",
+"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." => "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.",
+"Cannot write into \"config\" directory" => "Tidak dapat menulis kedalam direktori \"config\"",
+"Cannot write into \"apps\" directory" => "Tidak dapat menulis kedalam direktori \"apps\"",
+"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." => "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.",
+"Cannot create \"data\" directory (%s)" => "Tidak dapat membuat direktori (%s) \"data\"",
+"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." => "Hal ini biasanya dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\">memberikan akses tulis bagi situs web ke direktori root</a>.",
+"Setting locale to %s failed" => "Pengaturan lokal ke %s gagal",
+"Please install one of these locales on your system and restart your webserver." => "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.",
+"Please ask your server administrator to install the module." => "Mohon tanyakan administrator Anda untuk menginstal module.",
+"PHP module %s not installed." => "Module PHP %s tidak terinstal.",
+"PHP %s or higher is required." => "Diperlukan PHP %s atau yang lebih tinggi.",
+"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." => "Mohon tanyakan administrator Anda untuk memperbarui PHP ke versi terkini. Versi PHP Anda tidak lagi didukung oleh ownCloud dan komunitas PHP.",
+"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." => "PHP Safe Mode diaktifkan. ownCloud memerlukan ini untuk dinonaktifkan untuk dapat bekerja dengan banar.",
+"PHP modules have been installed, but they are still listed as missing?" => "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?",
+"Please ask your server administrator to restart the web server." => "Mohon minta administrator Anda untuk menjalankan ulang server web.",
+"PostgreSQL >= 9 required" => "Diperlukan PostgreSQL >= 9",
+"Please upgrade your database version" => "Mohon perbarui versi basis data Anda",
+"Error occurred while checking PostgreSQL version" => "Terjadi kesalahan saat memeriksa versi PostgreSQL",
+"Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" => "Pastikan bahwa Anda memiliki PostgreSQL >= 9 atau periksa log untuk informasi lebih lanjut tentang kesalahan",
+"Please change the permissions to 0770 so that the directory cannot be listed by other users." => "Mohon ubah perizinan menjadi 0770 sehingga direktori tersebut tidak dapat dilihat oleh pengguna lain.",
+"Data directory (%s) is readable by other users" => "Direktori data (%s) dapat dibaca oleh pengguna lain",
+"Data directory (%s) is invalid" => "Direktori data (%s) tidak sah",
+"Please check that the data directory contains a file \".ocdata\" in its root." => "Mohon periksa apakah direktori data berisi sebuah berkas \".ocdata\".",
+"Could not obtain lock type %d on \"%s\"." => "Tidak bisa memperoleh jenis kunci %d pada \"%s\"."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
index 1d71816d32c..c9eaff8a35c 100644
--- a/lib/l10n/it.php
+++ b/lib/l10n/it.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Impostazioni",
"Users" => "Utenti",
"Admin" => "Admin",
+"Recommended" => "Consigliata",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "L'applicazione \\\"%s\\\" non può essere installata poiché non è compatibile con questa versione di ownCloud.",
"No app name specified" => "Il nome dell'applicazione non è specificato",
"Unknown filetype" => "Tipo di file sconosciuto",
diff --git a/lib/l10n/ja.php b/lib/l10n/ja.php
index 445702069f1..ca54f105377 100644
--- a/lib/l10n/ja.php
+++ b/lib/l10n/ja.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "設定",
"Users" => "ユーザー",
"Admin" => "管理",
+"Recommended" => "推奨",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "アプリ \\\"%s\\\" をインストールできません。現在のownCloudのバージョンと互換性がありません。",
"No app name specified" => "アプリ名が未指定",
"Unknown filetype" => "不明なファイルタイプ",
@@ -108,7 +109,7 @@ $TRANSLATIONS = array(
"Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." => "マジッククォートは有効です。ownCloudを適切に動作させるには無効にする必要があります。",
"Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." => "マジッククォートは推奨されておらず、ほとんど役に立たない設定のため、無効化すべきです。サーバー管理者に、php.iniもしくはWebサーバー設定で無効化するよう依頼してください。",
"PHP modules have been installed, but they are still listed as missing?" => "PHP モジュールはインストールされていますが、まだ一覧に表示されていますか?",
-"Please ask your server administrator to restart the web server." => "サーバー管理者にWEBサーバーを再起動するよう依頼してください。",
+"Please ask your server administrator to restart the web server." => "サーバー管理者にWebサーバーを再起動するよう依頼してください。",
"PostgreSQL >= 9 required" => "PostgreSQL >= 9 が必要です",
"Please upgrade your database version" => "新しいバージョンのデータベースにアップグレードしてください",
"Error occurred while checking PostgreSQL version" => "PostgreSQL のバージョンチェック中にエラーが発生しました",
diff --git a/lib/l10n/nl.php b/lib/l10n/nl.php
index f7a91d2785d..f5a81dd6ee3 100644
--- a/lib/l10n/nl.php
+++ b/lib/l10n/nl.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Instellingen",
"Users" => "Gebruikers",
"Admin" => "Beheerder",
+"Recommended" => "Aanbevolen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "App \\\"%s\\\" kan niet worden geïnstalleerd omdat de app niet compatible is met deze versie van ownCloud.",
"No app name specified" => "De app naam is niet gespecificeerd.",
"Unknown filetype" => "Onbekend bestandsformaat",
diff --git a/lib/l10n/pl.php b/lib/l10n/pl.php
index 4b73fffa6cf..81c844f6d5f 100644
--- a/lib/l10n/pl.php
+++ b/lib/l10n/pl.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Ustawienia",
"Users" => "Użytkownicy",
"Admin" => "Administrator",
+"Recommended" => "Polecane",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Aplikacja \\\"%s\\\" nie może zostać zainstalowana ponieważ nie jest kompatybilna z tą wersją ownCloud.",
"No app name specified" => "Nie określono nazwy aplikacji",
"Unknown filetype" => "Nieznany typ pliku",
@@ -50,6 +51,7 @@ $TRANSLATIONS = array(
"PostgreSQL username and/or password not valid" => "PostgreSQL: Nazwa użytkownika i/lub hasło jest niepoprawne",
"Set an admin username." => "Ustaw nazwę administratora.",
"Set an admin password." => "Ustaw hasło administratora.",
+"Can't create or write into the data directory %s" => "Nie można tworzyć ani zapisywać w katalogu %s",
"%s shared »%s« with you" => "%s Współdzielone »%s« z tobą",
"Sharing %s failed, because the file does not exist" => "Wspóldzielenie %s nie powiodło się. ponieważ plik nie istnieje",
"You are not allowed to share %s" => "Nie masz uprawnień aby udostępnić %s",
diff --git a/lib/l10n/pt_BR.php b/lib/l10n/pt_BR.php
index 57152025794..d0dc9078128 100644
--- a/lib/l10n/pt_BR.php
+++ b/lib/l10n/pt_BR.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Configurações",
"Users" => "Usuários",
"Admin" => "Admin",
+"Recommended" => "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do ownCloud.",
"No app name specified" => "O nome do aplicativo não foi especificado.",
"Unknown filetype" => "Tipo de arquivo desconhecido",
diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php
index 20cfef8a2cb..f475fe934a6 100644
--- a/lib/l10n/pt_PT.php
+++ b/lib/l10n/pt_PT.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Configurações",
"Users" => "Utilizadores",
"Admin" => "Admin",
+"Recommended" => "Recomendado",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "A Aplicação \\\"%s\\\" não pode ser instalada porque não é compatível com esta versão do owncloud.",
"No app name specified" => "O nome da aplicação não foi especificado",
"Unknown filetype" => "Ficheiro desconhecido",
diff --git a/lib/l10n/ro.php b/lib/l10n/ro.php
index 67cddf642ad..20817232f8e 100644
--- a/lib/l10n/ro.php
+++ b/lib/l10n/ro.php
@@ -1,10 +1,14 @@
<?php
$TRANSLATIONS = array(
+"Cannot write into \"config\" directory!" => "Nu se poate scrie în folderul \"config\"!",
+"See %s" => "Vezi %s",
"Help" => "Ajutor",
"Personal" => "Personal",
"Settings" => "Setări",
"Users" => "Utilizatori",
"Admin" => "Admin",
+"Recommended" => "Recomandat",
+"No app name specified" => "Niciun nume de aplicație specificat",
"Unknown filetype" => "Tip fișier necunoscut",
"Invalid image" => "Imagine invalidă",
"web services under your control" => "servicii web controlate de tine",
@@ -12,6 +16,7 @@ $TRANSLATIONS = array(
"Authentication error" => "Eroare la autentificare",
"Token expired. Please reload page." => "Token expirat. Te rugăm să reîncarci pagina.",
"Unknown user" => "Utilizator necunoscut",
+"%s enter the database name." => "%s introduceți numele bazei de date",
"MS SQL username and/or password not valid: %s" => "Nume utilizator și/sau parolă MS SQL greșită: %s",
"MySQL/MariaDB username and/or password not valid" => "Nume utilizator și/sau parolă MySQL/MariaDB greșită",
"DB Error: \"%s\"" => "Eroare Bază de Date: \"%s\"",
@@ -19,10 +24,13 @@ $TRANSLATIONS = array(
"Drop this user from MySQL/MariaDB" => "Șterge acest utilizator din MySQL/MariaDB",
"MySQL/MariaDB user '%s'@'%%' already exists" => "Utilizatorul MySQL/MariaDB '%s'@'%%' deja există.",
"Drop this user from MySQL/MariaDB." => "Șterge acest utilizator din MySQL/MariaDB.",
+"Oracle connection could not be established" => "Conexiunea Oracle nu a putut fi stabilită",
"PostgreSQL username and/or password not valid" => "Nume utilizator și/sau parolă PostgreSQL greșită",
"Set an admin username." => "Setează un nume de administrator.",
"Set an admin password." => "Setează o parolă de administrator.",
"%s shared »%s« with you" => "%s Partajat »%s« cu tine de",
+"You are not allowed to share %s" => "Nu există permisiunea de partajare %s",
+"Share type %s is not valid for %s" => "Tipul partajării %s nu este valid pentru %s",
"Could not find category \"%s\"" => "Cloud nu a gasit categoria \"%s\"",
"seconds ago" => "secunde în urmă",
"_%n minute ago_::_%n minutes ago_" => array("","","acum %n minute"),
@@ -35,6 +43,9 @@ $TRANSLATIONS = array(
"last year" => "ultimul an",
"years ago" => "ani în urmă",
"A valid username must be provided" => "Trebuie să furnizaţi un nume de utilizator valid",
-"A valid password must be provided" => "Trebuie să furnizaţi o parolă validă"
+"A valid password must be provided" => "Trebuie să furnizaţi o parolă validă",
+"The username is already being used" => "Numele de utilizator este deja folosit",
+"Cannot write into \"config\" directory" => "Nu se poate scrie în folderul \"config\"",
+"Cannot write into \"apps\" directory" => "Nu se poate scrie în folderul \"apps\""
);
$PLURAL_FORMS = "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));";
diff --git a/lib/l10n/sl.php b/lib/l10n/sl.php
index af92aac057d..c004483c0eb 100644
--- a/lib/l10n/sl.php
+++ b/lib/l10n/sl.php
@@ -1,13 +1,18 @@
<?php
$TRANSLATIONS = array(
"Cannot write into \"config\" directory!" => "Mapa 'config' nima določenih ustreznih dovoljenj za pisanje!",
+"This can usually be fixed by giving the webserver write access to the config directory" => "Napako je mogoče odpraviti z dodelitvijo dovoljenja spletnemu strežniku za pisanje v nastavitveno mapo.",
"See %s" => "Oglejte si %s",
+"This can usually be fixed by %sgiving the webserver write access to the config directory%s." => "Napako je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje v nastavitveno mapo%s.",
"Sample configuration detected" => "Zaznana je neustrezna preizkusna nastavitev",
+"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" => "Zaznano je, da je bila v sistem kopirana datoteka z enostavno nastavitvijo. To lahko vpliva na namestitev in zato možnost ni podprta. Pred spremembami datoteke config.php si natančno preberite dokumentacijo.",
"Help" => "Pomoč",
"Personal" => "Osebno",
"Settings" => "Nastavitve",
"Users" => "Uporabniki",
"Admin" => "Skrbništvo",
+"Recommended" => "Priporočljivo",
+"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Programnika \\\"%s\\\" ni mogoče namestiti, ker različica programa ni skladna z različico okolja ownCloud.",
"No app name specified" => "Ni podanega imena programa",
"Unknown filetype" => "Neznana vrsta datoteke",
"Invalid image" => "Neveljavna slika",
@@ -46,6 +51,7 @@ $TRANSLATIONS = array(
"PostgreSQL username and/or password not valid" => "Uporabniško ime ali geslo PostgreSQL ni veljavno",
"Set an admin username." => "Nastavi uporabniško ime skrbnika.",
"Set an admin password." => "Nastavi geslo skrbnika.",
+"Can't create or write into the data directory %s" => "Ni mogoče zapisati podatkov v podatkovno mapo %s",
"%s shared »%s« with you" => "%s je omogočil souporabo »%s«",
"Sharing %s failed, because the file does not exist" => "Souporaba %s je spodletela, ker ta datoteka ne obstaja",
"You are not allowed to share %s" => "Omogočanje souporabe %s brez ustreznih dovoljenj ni mogoče.",
@@ -55,9 +61,14 @@ $TRANSLATIONS = array(
"Sharing %s failed, because this item is already shared with %s" => "Nastavljanje souporabe %s je spodletela, ker je ima uporabnik %s predmet že v souporabi.",
"Sharing %s failed, because the group %s does not exist" => "Nastavljanje souporabe %s je spodletelo, ker je skupina %s ne obstaja.",
"Sharing %s failed, because %s is not a member of the group %s" => "Nastavljanje souporabe %s je spodletelo, ker uporabnik %s ni član skupine %s.",
+"You need to provide a password to create a public link, only protected links are allowed" => "Navesti je treba geslo za ustvarjanje javne povezave, saj so dovoljene le zaščitene.",
"Sharing %s failed, because sharing with links is not allowed" => "Nastavljanje souporabe %s je spodletelo, ker souporaba preko povezave ni dovoljena.",
"Share type %s is not valid for %s" => "Vrsta souporabe %s za %s ni veljavna.",
+"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" => "Nastavljanje dovoljenj za %s je spodletelo, saj ta presegajo dovoljenja dodeljena uporabniku %s.",
+"Setting permissions for %s failed, because the item was not found" => "Nastavljanje dovoljenj za %s je spodletelo, ker predmeta ni mogoče najti.",
+"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" => "Ni mogoče določiti datuma preteka. Ni dovoljeno, da so mape ali datoteke, dodeljene v souporabo, v souporabi po %s.",
"Cannot set expiration date. Expiration date is in the past" => "Ni mogoče nastaviti datuma preteka. Ta datum je že preteklost.",
+"Sharing backend %s must implement the interface OCP\\Share_Backend" => "Souporaba ozadnjega programa %s mora vsebovati tudi vmesnik OCP\\Share_Backend",
"Sharing backend %s not found" => "Ozadnjega programa %s za souporabo ni mogoče najti",
"Sharing backend for %s not found" => "Ozadnjega programa za souporabo za %s ni mogoče najti",
"Sharing %s failed, because the user %s is the original sharer" => "Nastavljanje souporabe %s je spodletelo, ker je uporabnik %s omogočil souporabo predmeta.",
@@ -81,17 +92,28 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Navedeno mora biti veljavno geslo",
"The username is already being used" => "Vpisano uporabniško ime je že v uporabi",
"No database drivers (sqlite, mysql, or postgresql) installed." => "Ni nameščenih programnikov podatkovnih zbirk (sqlite, mysql, ali postgresql).",
+"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." => "Dovoljenja je mogoče odpraviti z %sdodelitvijo dovoljenja spletnemu strežniku za pisanje korensko mapo%s.",
"Cannot write into \"config\" directory" => "Mapa 'config' nima nastavljenih ustreznih dovoljenj za pisanje!",
"Cannot write into \"apps\" directory" => "Mapa \"apps\" nima nastavljenih ustreznih dovoljenj za pisanje!",
+"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." => "Napako je mogoče odpraviti z dodelitvijo dovoljenja spletnemu strežniku %s za pisanje v mapo programov %s, ali pa z onemogočanjem nameščanja programov v nastavitveni datoteki.",
+"Cannot create \"data\" directory (%s)" => "Ni mogoče ustvariti\"podatkovne\" mape (%s)",
+"This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." => "Napako je mogoče odpraviti z <a href=\"%s\" target=\"_blank\">dodelitvijo dovoljenja spletnemu strežniku za pisanje v korensko mapo</a>.",
+"Setting locale to %s failed" => "Nastavljanje jezikovnih določil na %s je spodletelo.",
+"Please install one of these locales on your system and restart your webserver." => "Namestiti je treba podporo za vsaj eno od navedenih jezikovnih določil v sistemu in nato ponovno zagnati spletni strežnik.",
"Please ask your server administrator to install the module." => "Obvestite skrbnika strežnika, da je treba namestiti manjkajoč modul.",
"PHP module %s not installed." => "Modul PHP %s ni nameščen.",
"PHP %s or higher is required." => "Zahtevana je različica PHP %s ali višja.",
"Please ask your server administrator to update PHP to the latest version. Your PHP version is no longer supported by ownCloud and the PHP community." => "Obvestite skrbnika strežnika, da je treba posodobiti okolje PHP na najnovejšo različico. Trenutno nameščene različice skupnost PHP in ownCloud ne podpira več.",
+"PHP Safe Mode is enabled. ownCloud requires that it is disabled to work properly." => "Omogočen je varni način PHP. Za pravilno delovanje system ownCloud je treba možnost onemogočiti.",
+"PHP Safe Mode is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." => "Možnost varnega načina PHP je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
+"Magic Quotes is enabled. ownCloud requires that it is disabled to work properly." => "Omogočena je možnost Magic Quotes. Za pravilno delovanje sistema ownCloud je treba možnost onemogočiti.",
+"Magic Quotes is a deprecated and mostly useless setting that should be disabled. Please ask your server administrator to disable it in php.ini or in your webserver config." => "Možnost Magic Quotes je opuščena in jo je priporočljivo onemogočiti. Stopite v stik s skrbnikom sistema oziroma onemogočite možnost v datoteki php.ini ali med nastavitvami spletnega strežnika.",
"PHP modules have been installed, but they are still listed as missing?" => "Ali so bili moduli PHP nameščeni, pa so še vedno označeni kot manjkajoči?",
"Please ask your server administrator to restart the web server." => "Obvestite skrbnika strežnika, da je treba ponovno zagnati spletni strežnik.",
"PostgreSQL >= 9 required" => "Zahtevana je različica PostgreSQL >= 9.",
"Please upgrade your database version" => "Posodobite različico podatkovne zbirke.",
"Error occurred while checking PostgreSQL version" => "Prišlo je do napake med preverjanjem različice PostgreSQL.",
+"Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" => "Prepričajte se, da je nameščena različica PostgreSQL >= 9 in preverite dnevniški zapis za več podrobnosti o napaki.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." => "Spremenite dovoljenja mape na 0770 in s tem onemogočite branje vsebine drugim uporabnikom.",
"Data directory (%s) is readable by other users" => "Podatkovna mapa (%s) ima določena dovoljenja za branje skupine.",
"Data directory (%s) is invalid" => "Podatkovna mapa (%s) ni veljavna.",
diff --git a/lib/l10n/sv.php b/lib/l10n/sv.php
index 6558e3bb02e..c042b6af6cb 100644
--- a/lib/l10n/sv.php
+++ b/lib/l10n/sv.php
@@ -8,6 +8,7 @@ $TRANSLATIONS = array(
"Settings" => "Inställningar",
"Users" => "Användare",
"Admin" => "Admin",
+"Recommended" => "Rekomenderad",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Applikationen \\\"%s\\\" kan inte installeras då en inte är kompatibel med denna version utav ownCloud.",
"No app name specified" => "Inget appnamn angivet",
"Unknown filetype" => "Okänd filtyp",
diff --git a/lib/l10n/tr.php b/lib/l10n/tr.php
index aba1e7db1cc..4477efd07cc 100644
--- a/lib/l10n/tr.php
+++ b/lib/l10n/tr.php
@@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Settings" => "Ayarlar",
"Users" => "Kullanıcılar",
"Admin" => "Yönetici",
+"Recommended" => "Önerilen",
"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "ownCloud yazılımının bu sürümü ile uyumlu olmadığı için \\\"%s\\\" uygulaması kurulamaz.",
"No app name specified" => "Uygulama adı belirtilmedi",
"Unknown filetype" => "Bilinmeyen dosya türü",
diff --git a/lib/l10n/uk.php b/lib/l10n/uk.php
index 6832b707cb4..cf8678c40c5 100644
--- a/lib/l10n/uk.php
+++ b/lib/l10n/uk.php
@@ -1,29 +1,68 @@
<?php
$TRANSLATIONS = array(
+"Cannot write into \"config\" directory!" => "Не можу писати у каталог \"config\"!",
+"This can usually be fixed by giving the webserver write access to the config directory" => "Зазвичай це можна виправити, надавши веб-серверу права на запис в теці конфігурації",
+"See %s" => "Перегляд %s",
+"This can usually be fixed by %sgiving the webserver write access to the config directory%s." => "Зазвичай це можна виправити, %sнадавши веб-серверу права на запис в теці конфігурації%s.",
+"Sample configuration detected" => "Виявлено приклад конфігурації",
+"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" => "Була виявлена конфігурація з прикладу. Це може нашкодити вашій системі та не підтримується. Будь ласка, зверніться до документації перед внесенням змін в файл config.php",
"Help" => "Допомога",
"Personal" => "Особисте",
"Settings" => "Налаштування",
"Users" => "Користувачі",
"Admin" => "Адмін",
+"Recommended" => "Рекомендуємо",
+"App \\\"%s\\\" can't be installed because it is not compatible with this version of ownCloud." => "Додаток \\\"%s\\\" не встановлено через несумісність з даною версією ownCloud.",
+"No app name specified" => "Не вказано ім'я додатку",
"Unknown filetype" => "Невідомий тип файлу",
"Invalid image" => "Невірне зображення",
"web services under your control" => "підконтрольні Вам веб-сервіси",
+"App directory already exists" => "Тека додатку вже існує",
+"Can't create app folder. Please fix permissions. %s" => "Неможливо створити теку додатку. Будь ласка, виправте права доступу. %s",
+"No source specified when installing app" => "Не вказано джерело при встановлені додатку",
+"No href specified when installing app from http" => "Не вказано атрибут href при встановлені додатку з http",
+"No path specified when installing app from local file" => "Не вказано шлях при встановлені додатку з локального файлу",
+"Archives of type %s are not supported" => "Архіви %s не підтримуються",
+"Failed to open archive when installing app" => "Неможливо відкрити архів при встановлені додатку",
+"App does not provide an info.xml file" => "Додаток не має файл info.xml",
+"App can't be installed because of not allowed code in the App" => "Неможливо встановити додаток. Він містить заборонений код",
+"App can't be installed because it is not compatible with this version of ownCloud" => "Неможливо встановити додаток, він є несумісним з даною версією ownCloud",
+"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" => "Неможливо встановити додаток, оскільки він містить параметр <shipped>true</shipped> заборонений додаткам, що не входять в поставку ",
+"App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" => "Неможливо встановити додаток. Версія в файлі info.xml/version не співпадає з заявленою в магазині додатків",
"Application is not enabled" => "Додаток не увімкнений",
"Authentication error" => "Помилка автентифікації",
"Token expired. Please reload page." => "Строк дії токена скінчився. Будь ласка, перезавантажте сторінку.",
+"Unknown user" => "Невідомий користувач",
"%s enter the database username." => "%s введіть ім'я користувача бази даних.",
"%s enter the database name." => "%s введіть назву бази даних.",
"%s you may not use dots in the database name" => "%s не можна використовувати крапки в назві бази даних",
"MS SQL username and/or password not valid: %s" => "MS SQL ім'я користувача та/або пароль не дійсні: %s",
"You need to enter either an existing account or the administrator." => "Вам потрібно ввести або існуючий обліковий запис або administrator.",
+"MySQL/MariaDB username and/or password not valid" => "MySQL/MariaDB ім'я користувача та/або пароль не дійсні",
"DB Error: \"%s\"" => "Помилка БД: \"%s\"",
"Offending command was: \"%s\"" => "Команда, що викликала проблему: \"%s\"",
+"MySQL/MariaDB user '%s'@'localhost' exists already." => "Користувач MySQL/MariaDB '%s'@'localhost' вже існує.",
+"Drop this user from MySQL/MariaDB" => "Видалити цього користувача з MySQL/MariaDB",
+"MySQL/MariaDB user '%s'@'%%' already exists" => "Користувач MySQL/MariaDB '%s'@'%%' вже існує",
+"Drop this user from MySQL/MariaDB." => "Видалити цього користувача з MySQL/MariaDB.",
+"Oracle connection could not be established" => "Не можемо з'єднатися з Oracle ",
"Oracle username and/or password not valid" => "Oracle ім'я користувача та/або пароль не дійсні",
"Offending command was: \"%s\", name: %s, password: %s" => "Команда, що викликала проблему: \"%s\", ім'я: %s, пароль: %s",
"PostgreSQL username and/or password not valid" => "PostgreSQL ім'я користувача та/або пароль не дійсні",
"Set an admin username." => "Встановіть ім'я адміністратора.",
"Set an admin password." => "Встановіть пароль адміністратора.",
+"Can't create or write into the data directory %s" => "Неможливо створити або записати каталог даних %s",
"%s shared »%s« with you" => "%s розподілено »%s« з тобою",
+"Sharing %s failed, because the file does not exist" => "Не вдалося поділитися %s, оскільки файл не існує",
+"You are not allowed to share %s" => "Вам заборонено поширювати %s",
+"Sharing %s failed, because the user %s is the item owner" => "Не вдалося поділитися з %s, оскільки %s вже є володарем",
+"Sharing %s failed, because the user %s does not exist" => "Не вдалося поділитися з %s, оскільки користувач %s не існує",
+"Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" => "Не вдалося поділитися %s, оскільки користувач %s не є членом будь-якої групи в яку входить %s",
+"Sharing %s failed, because this item is already shared with %s" => "Не вдалося поділитися %s, оскільки файл вже в загальному доступі з %s",
+"Sharing %s failed, because the group %s does not exist" => "Не вдалося поділитися %s, оскільки група %s не існує",
+"Sharing %s failed, because %s is not a member of the group %s" => "Не вдалося поділитися %s, оскільки %s не є членом групи %s",
+"You need to provide a password to create a public link, only protected links are allowed" => "Вам необхідно задати пароль для створення публічного посилання. Дозволені лише захищені посилання",
+"Sharing %s failed, because sharing with links is not allowed" => "Не вдалося поділитися %s, оскільки публічний доступ через посилання заборонений",
"Could not find category \"%s\"" => "Не вдалося знайти категорію \"%s\"",
"seconds ago" => "секунди тому",
"_%n minute ago_::_%n minutes ago_" => array("","","%n хвилин тому"),
diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php
index f31b121c8e8..f31b121c8e8 100755..100644
--- a/lib/private/activitymanager.php
+++ b/lib/private/activitymanager.php
diff --git a/lib/private/app.php b/lib/private/app.php
index 95a8a7302d9..8fcffbad950 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -89,10 +89,11 @@ class OC_App {
*/
public static function loadApp($app, $checkUpgrade = true) {
if (is_file(self::getAppPath($app) . '/appinfo/app.php')) {
+ \OC::$server->getEventLogger()->start('load_app_' . $app, 'Load app: ' . $app);
if ($checkUpgrade and self::shouldUpgrade($app)) {
throw new \OC\NeedsUpdateException();
}
- require_once $app . '/appinfo/app.php';
+ self::requireAppFile($app);
if (self::isType($app, array('authentication'))) {
// since authentication apps affect the "is app enabled for group" check,
// the enabled apps cache needs to be cleared to make sure that the
@@ -100,10 +101,21 @@ class OC_App {
// enabled for groups
self::$enabledAppsCache = array();
}
+ \OC::$server->getEventLogger()->end('load_app_' . $app);
}
}
/**
+ * Load app.php from the given app
+ *
+ * @param string $app app name
+ */
+ private static function requireAppFile($app) {
+ // encapsulated here to avoid variable scope conflicts
+ require_once $app . '/appinfo/app.php';
+ }
+
+ /**
* check if an app is of a specific type
*
* @param string $app
@@ -1101,13 +1113,17 @@ class OC_App {
return $versions; // when function is used besides in checkUpgrade
}
$versions = array();
- $query = OC_DB::prepare('SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig`'
- . ' WHERE `configkey` = \'installed_version\'');
- $result = $query->execute();
- while ($row = $result->fetchRow()) {
- $versions[$row['appid']] = $row['configvalue'];
+ try {
+ $query = OC_DB::prepare('SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig`'
+ . ' WHERE `configkey` = \'installed_version\'');
+ $result = $query->execute();
+ while ($row = $result->fetchRow()) {
+ $versions[$row['appid']] = $row['configvalue'];
+ }
+ return $versions;
+ } catch (\Exception $e) {
+ return array();
}
- return $versions;
}
diff --git a/lib/private/appframework/db/db.php b/lib/private/appframework/db/db.php
index fc77a38f814..fb30505d05a 100644
--- a/lib/private/appframework/db/db.php
+++ b/lib/private/appframework/db/db.php
@@ -30,28 +30,42 @@ use \OCP\IDb;
* Small Facade for being able to inject the database connection for tests
*/
class Db implements IDb {
+ /**
+ * @var \OCP\IDBConnection
+ */
+ protected $connection;
+ /**
+ * @param \OCP\IDBConnection $connection
+ */
+ public function __construct($connection) {
+ $this->connection = $connection;
+ }
- /**
- * Used to abstract the owncloud database access away
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @return \OC_DB_StatementWrapper prepared SQL query
- */
- public function prepareQuery($sql, $limit=null, $offset=null){
- return \OCP\DB::prepare($sql, $limit, $offset);
- }
-
-
- /**
- * Used to get the id of the just inserted element
- * @param string $tableName the name of the table where we inserted the item
- * @return int the id of the inserted element
- */
- public function getInsertId($tableName){
- return \OCP\DB::insertid($tableName);
- }
+ /**
+ * Used to abstract the owncloud database access away
+ *
+ * @param string $sql the sql query with ? placeholder for params
+ * @param int $limit the maximum number of rows
+ * @param int $offset from which row we want to start
+ * @return \OC_DB_StatementWrapper prepared SQL query
+ */
+ public function prepareQuery($sql, $limit = null, $offset = null) {
+ $isManipulation = \OC_DB::isManipulation($sql);
+ $statement = $this->connection->prepare($sql, $limit, $offset);
+ return new \OC_DB_StatementWrapper($statement, $isManipulation);
+ }
+
+
+ /**
+ * Used to get the id of the just inserted element
+ *
+ * @param string $tableName the name of the table where we inserted the item
+ * @return int the id of the inserted element
+ */
+ public function getInsertId($tableName) {
+ return $this->connection->lastInsertId($tableName);
+ }
}
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
index e7efa3fa219..f7fee347215 100644
--- a/lib/private/appframework/dependencyinjection/dicontainer.php
+++ b/lib/private/appframework/dependencyinjection/dicontainer.php
@@ -31,6 +31,7 @@ use OC\AppFramework\Core\API;
use OC\AppFramework\Middleware\MiddlewareDispatcher;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\Security\CORSMiddleware;
+use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
use OC\AppFramework\Utility\TimeFactory;
use OC\AppFramework\Utility\ControllerMethodReflector;
@@ -67,9 +68,10 @@ class DIContainer extends SimpleContainer implements IAppContainer{
*/
$this['Request'] = $this->share(function($c) {
/** @var $c SimpleContainer */
- /** @var $server IServerContainer */
+ /** @var $server SimpleContainer */
$server = $c->query('ServerContainer');
$server->registerParameter('urlParams', $c['urlParams']);
+ /** @var $server IServerContainer */
return $server->getRequest();
});
@@ -115,6 +117,14 @@ class DIContainer extends SimpleContainer implements IAppContainer{
);
});
+ $this['SessionMiddleware'] = $this->share(function($c) use ($app) {
+ return new SessionMiddleware(
+ $c['Request'],
+ $c['ControllerMethodReflector'],
+ $app->getServer()->getSession()
+ );
+ });
+
$middleWares = &$this->middleWares;
$this['MiddlewareDispatcher'] = $this->share(function($c) use (&$middleWares) {
$dispatcher = new MiddlewareDispatcher();
@@ -125,6 +135,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
$dispatcher->registerMiddleware($c[$middleWare]);
}
+ $dispatcher->registerMiddleware($c['SessionMiddleware']);
return $dispatcher;
});
diff --git a/lib/private/appframework/middleware/middlewaredispatcher.php b/lib/private/appframework/middleware/middlewaredispatcher.php
index dcb63a8e552..41eef4aedb9 100644
--- a/lib/private/appframework/middleware/middlewaredispatcher.php
+++ b/lib/private/appframework/middleware/middlewaredispatcher.php
@@ -82,8 +82,9 @@ class MiddlewareDispatcher {
*/
public function beforeController(Controller $controller, $methodName){
// we need to count so that we know which middlewares we have to ask in
- // case theres an exception
- for($i=0; $i<count($this->middlewares); $i++){
+ // case there is an exception
+ $middlewareCount = count($this->middlewares);
+ for($i = 0; $i < $middlewareCount; $i++){
$this->middlewareCounter++;
$middleware = $this->middlewares[$i];
$middleware->beforeController($controller, $methodName);
diff --git a/lib/private/appframework/middleware/sessionmiddleware.php b/lib/private/appframework/middleware/sessionmiddleware.php
new file mode 100644
index 00000000000..d50880f3739
--- /dev/null
+++ b/lib/private/appframework/middleware/sessionmiddleware.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * ownCloud - App Framework
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ * @copyright Thomas Müller 2014
+ */
+
+namespace OC\AppFramework\Middleware;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OCP\IRequest;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Middleware;
+use OCP\ISession;
+
+class SessionMiddleware extends Middleware {
+
+ /**
+ * @var IRequest
+ */
+ private $request;
+
+ /**
+ * @var ControllerMethodReflector
+ */
+ private $reflector;
+
+ /**
+ * @param IRequest $request
+ * @param ControllerMethodReflector $reflector
+ */
+ public function __construct(IRequest $request,
+ ControllerMethodReflector $reflector,
+ ISession $session
+) {
+ $this->request = $request;
+ $this->reflector = $reflector;
+ $this->session = $session;
+ }
+
+ /**
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ */
+ public function beforeController($controller, $methodName) {
+ $useSession = $this->reflector->hasAnnotation('UseSession');
+ if (!$useSession) {
+ $this->session->close();
+ }
+ }
+
+ /**
+ * @param \OCP\AppFramework\Controller $controller
+ * @param string $methodName
+ * @param Response $response
+ * @return Response
+ */
+ public function afterController($controller, $methodName, Response $response){
+ $useSession = $this->reflector->hasAnnotation('UseSession');
+ if ($useSession) {
+ $this->session->close();
+ }
+ return $response;
+ }
+
+}
diff --git a/lib/private/appframework/utility/simplecontainer.php b/lib/private/appframework/utility/simplecontainer.php
index 1ad06b9ab23..a2d90138dfa 100644
--- a/lib/private/appframework/utility/simplecontainer.php
+++ b/lib/private/appframework/utility/simplecontainer.php
@@ -11,14 +11,17 @@ class SimpleContainer extends \Pimple implements \OCP\IContainer {
/**
* @param string $name name of the service to query for
- * @return object registered service for the given $name
+ * @return mixed registered service for the given $name
*/
public function query($name) {
return $this->offsetGet($name);
}
- function registerParameter($name, $value)
- {
+ /**
+ * @param string $name
+ * @param mixed $value
+ */
+ function registerParameter($name, $value) {
$this[$name] = $value;
}
@@ -29,9 +32,9 @@ class SimpleContainer extends \Pimple implements \OCP\IContainer {
*
* @param string $name name of the service to register another backend for
* @param \Closure $closure the closure to be called on service creation
+ * @param bool $shared
*/
- function registerService($name, \Closure $closure, $shared = true)
- {
+ function registerService($name, \Closure $closure, $shared = true) {
if ($shared) {
$this[$name] = \Pimple::share($closure);
} else {
diff --git a/lib/private/arrayparser.php b/lib/private/arrayparser.php
index a5e1f6653fc..dab1817c2ed 100644
--- a/lib/private/arrayparser.php
+++ b/lib/private/arrayparser.php
@@ -182,7 +182,9 @@ class ArrayParser {
if (substr($body, -1, 1) !== ',') {
$body .= ',';
}
- for ($i = 0; $i < strlen($body); $i++) {
+
+ $bodyLength = strlen($body);
+ for ($i = 0; $i < $bodyLength; $i++) {
$char = substr($body, $i, 1);
if ($char === '\\') {
if ($escaped) {
diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php
index 1b6d1f363b8..0d35c7d528e 100644
--- a/lib/private/connector/sabre/directory.php
+++ b/lib/private/connector/sabre/directory.php
@@ -205,13 +205,17 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node
* @return array
*/
public function getQuotaInfo() {
- $path = \OC\Files\Filesystem::getView()->getRelativePath($this->info->getPath());
- $storageInfo = OC_Helper::getStorageInfo($path);
- return array(
- $storageInfo['used'],
- $storageInfo['free']
- );
-
+ try {
+ $path = \OC\Files\Filesystem::getView()->getRelativePath($this->info->getPath());
+ $storageInfo = OC_Helper::getStorageInfo($path);
+ return array(
+ $storageInfo['used'],
+ $storageInfo['free']
+ );
+ }
+ catch (\OCP\Files\StorageNotAvailableException $e) {
+ return array(0, 0);
+ }
}
/**
diff --git a/lib/private/db.php b/lib/private/db.php
index 80163415a90..b820281b8a3 100644
--- a/lib/private/db.php
+++ b/lib/private/db.php
@@ -41,86 +41,12 @@ class DatabaseException extends Exception {
* Doctrine with some adaptions.
*/
class OC_DB {
- /**
- * @var \OC\DB\Connection $connection
- */
- static private $connection; //the preferred connection to use, only Doctrine
/**
- * connects to the database
- * @return boolean|null true if connection can be established or false on error
- *
- * Connects to the database as specified in config.php
- */
- public static function connect() {
- if(self::$connection) {
- return true;
- }
-
- $type = OC_Config::getValue('dbtype', 'sqlite');
- $factory = new \OC\DB\ConnectionFactory();
- if (!$factory->isValidType($type)) {
- return false;
- }
-
- $connectionParams = array(
- 'user' => OC_Config::getValue('dbuser', ''),
- 'password' => OC_Config::getValue('dbpassword', ''),
- );
- $name = OC_Config::getValue('dbname', 'owncloud');
-
- if ($factory->normalizeType($type) === 'sqlite3') {
- $datadir = OC_Config::getValue("datadirectory", OC::$SERVERROOT.'/data');
- $connectionParams['path'] = $datadir.'/'.$name.'.db';
- } else {
- $host = OC_Config::getValue('dbhost', '');
- if (strpos($host, ':')) {
- // Host variable may carry a port or socket.
- list($host, $portOrSocket) = explode(':', $host, 2);
- if (ctype_digit($portOrSocket)) {
- $connectionParams['port'] = $portOrSocket;
- } else {
- $connectionParams['unix_socket'] = $portOrSocket;
- }
- }
- $connectionParams['host'] = $host;
- $connectionParams['dbname'] = $name;
- }
-
- $connectionParams['tablePrefix'] = OC_Config::getValue('dbtableprefix', 'oc_');
-
- try {
- self::$connection = $factory->getConnection($type, $connectionParams);
- } catch(\Doctrine\DBAL\DBALException $e) {
- OC_Log::write('core', $e->getMessage(), OC_Log::FATAL);
- OC_User::setUserId(null);
-
- // send http status 503
- header('HTTP/1.1 503 Service Temporarily Unavailable');
- header('Status: 503 Service Temporarily Unavailable');
- OC_Template::printErrorPage('Failed to connect to database');
- die();
- }
-
- return true;
- }
-
- /**
- * The existing database connection is closed and connected again
- */
- public static function reconnect() {
- if(self::$connection) {
- self::$connection->close();
- self::$connection->connect();
- }
- }
-
- /**
- * @return \OC\DB\Connection
+ * @return \OCP\IDBConnection
*/
static public function getConnection() {
- self::connect();
- return self::$connection;
+ return \OC::$server->getDatabaseConnection();
}
/**
@@ -130,7 +56,7 @@ class OC_DB {
*/
private static function getMDB2SchemaManager()
{
- return new \OC\DB\MDB2SchemaManager(self::getConnection());
+ return new \OC\DB\MDB2SchemaManager(\OC::$server->getDatabaseConnection());
}
/**
@@ -145,7 +71,7 @@ class OC_DB {
* SQL query via Doctrine prepare(), needs to be execute()'d!
*/
static public function prepare( $query , $limit = null, $offset = null, $isManipulation = null) {
- self::connect();
+ $connection = \OC::$server->getDatabaseConnection();
if ($isManipulation === null) {
//try to guess, so we return the number of rows on manipulations
@@ -154,7 +80,7 @@ class OC_DB {
// return the result
try {
- $result = self::$connection->prepare($query, $limit, $offset);
+ $result =$connection->prepare($query, $limit, $offset);
} catch (\Doctrine\DBAL\DBALException $e) {
throw new \DatabaseException($e->getMessage(), $query);
}
@@ -251,8 +177,7 @@ class OC_DB {
* cause trouble!
*/
public static function insertid($table=null) {
- self::connect();
- return self::$connection->lastInsertId($table);
+ return \OC::$server->getDatabaseConnection()->lastInsertId($table);
}
/**
@@ -262,24 +187,28 @@ class OC_DB {
* @return boolean number of updated rows
*/
public static function insertIfNotExist($table, $input) {
- self::connect();
- return self::$connection->insertIfNotExist($table, $input);
+ return \OC::$server->getDatabaseConnection()->insertIfNotExist($table, $input);
}
/**
* Start a transaction
*/
public static function beginTransaction() {
- self::connect();
- self::$connection->beginTransaction();
+ return \OC::$server->getDatabaseConnection()->beginTransaction();
}
/**
* Commit the database changes done during a transaction that is in progress
*/
public static function commit() {
- self::connect();
- self::$connection->commit();
+ return \OC::$server->getDatabaseConnection()->commit();
+ }
+
+ /**
+ * Rollback the database changes done during a transaction that is in progress
+ */
+ public static function rollback() {
+ return \OC::$server->getDatabaseConnection()->rollback();
}
/**
@@ -347,17 +276,17 @@ class OC_DB {
* @param string $tableName the table to drop
*/
public static function dropTable($tableName) {
-
+ $connection = \OC::$server->getDatabaseConnection();
$tableName = OC_Config::getValue('dbtableprefix', 'oc_' ) . trim($tableName);
- self::$connection->beginTransaction();
+ $connection->beginTransaction();
- $platform = self::$connection->getDatabasePlatform();
+ $platform = $connection->getDatabasePlatform();
$sql = $platform->getDropTableSQL($platform->quoteIdentifier($tableName));
- self::$connection->query($sql);
+ $connection->executeQuery($sql);
- self::$connection->commit();
+ $connection->commit();
}
/**
@@ -397,8 +326,8 @@ class OC_DB {
}
public static function getErrorCode($error) {
- $code = self::$connection->errorCode();
- return $code;
+ $connection = \OC::$server->getDatabaseConnection();
+ return $connection->errorCode();
}
/**
* returns the error code and message as a string for logging
@@ -407,22 +336,8 @@ class OC_DB {
* @return string
*/
public static function getErrorMessage($error) {
- if (self::$connection) {
- return self::$connection->getError();
- }
- return '';
- }
-
- /**
- * @param bool $enabled
- */
- static public function enableCaching($enabled) {
- self::connect();
- if ($enabled) {
- self::$connection->enableQueryStatementCaching();
- } else {
- self::$connection->disableQueryStatementCaching();
- }
+ $connection = \OC::$server->getDatabaseConnection();
+ return $connection->getError();
}
/**
diff --git a/lib/private/db/adapter.php b/lib/private/db/adapter.php
index 6742ccdbb45..972008776f6 100644
--- a/lib/private/db/adapter.php
+++ b/lib/private/db/adapter.php
@@ -42,7 +42,7 @@ class Adapter {
/**
* insert the @input values when they do not exist yet
* @param string $table name
- * @param array $input key->value pairs
+ * @param array $input key->value pair, key has to be sanitized properly
* @return int count of inserted rows
*/
public function insertIfNotExist($table, $input) {
diff --git a/lib/private/db/connection.php b/lib/private/db/connection.php
index b7981fcd691..a6cdf858899 100644
--- a/lib/private/db/connection.php
+++ b/lib/private/db/connection.php
@@ -11,8 +11,9 @@ use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\Cache\QueryCacheProfile;
use Doctrine\Common\EventManager;
+use OCP\IDBConnection;
-class Connection extends \Doctrine\DBAL\Connection {
+class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
/**
* @var string $tablePrefix
*/
@@ -24,13 +25,6 @@ class Connection extends \Doctrine\DBAL\Connection {
protected $adapter;
/**
- * @var \Doctrine\DBAL\Driver\Statement[] $preparedQueries
- */
- protected $preparedQueries = array();
-
- protected $cachingQueryStatementEnabled = true;
-
- /**
* Initializes a new instance of the Connection class.
*
* @param array $params The connection parameters.
@@ -69,9 +63,6 @@ class Connection extends \Doctrine\DBAL\Connection {
$platform = $this->getDatabasePlatform();
$statement = $platform->modifyLimitQuery($statement, $limit, $offset);
} else {
- if (isset($this->preparedQueries[$statement]) && $this->cachingQueryStatementEnabled) {
- return $this->preparedQueries[$statement];
- }
$origStatement = $statement;
}
$statement = $this->replaceTablePrefix($statement);
@@ -80,11 +71,7 @@ class Connection extends \Doctrine\DBAL\Connection {
if(\OC_Config::getValue( 'log_query', false)) {
\OC_Log::write('core', 'DB prepare : '.$statement, \OC_Log::DEBUG);
}
- $result = parent::prepare($statement);
- if (is_null($limit) && $this->cachingQueryStatementEnabled) {
- $this->preparedQueries[$origStatement] = $result;
- }
- return $result;
+ return parent::prepare($statement);
}
/**
@@ -185,13 +172,4 @@ class Connection extends \Doctrine\DBAL\Connection {
protected function replaceTablePrefix($statement) {
return str_replace( '*PREFIX*', $this->tablePrefix, $statement );
}
-
- public function enableQueryStatementCaching() {
- $this->cachingQueryStatementEnabled = true;
- }
-
- public function disableQueryStatementCaching() {
- $this->cachingQueryStatementEnabled = false;
- $this->preparedQueries = array();
- }
}
diff --git a/lib/private/db/connectionfactory.php b/lib/private/db/connectionfactory.php
index 589a1c0affd..f6253e09b95 100644
--- a/lib/private/db/connectionfactory.php
+++ b/lib/private/db/connectionfactory.php
@@ -98,19 +98,6 @@ class ConnectionFactory {
new \Doctrine\DBAL\Configuration(),
$eventManager
);
- switch ($normalizedType) {
- case 'sqlite3':
- // Sqlite doesn't handle query caching and schema changes
- // TODO: find a better way to handle this
- /** @var $connection \OC\DB\Connection */
- $connection->disableQueryStatementCaching();
- break;
- case 'oci':
- // oracle seems to have issues with cached statements which have been closed
- /** @var $connection \OC\DB\Connection */
- $connection->disableQueryStatementCaching();
- break;
- }
return $connection;
}
@@ -131,4 +118,48 @@ class ConnectionFactory {
$normalizedType = $this->normalizeType($type);
return isset($this->defaultConnectionParams[$normalizedType]);
}
+
+ /**
+ * Create the connection parameters for the config
+ *
+ * @param \OCP\IConfig $config
+ * @return array
+ */
+ public function createConnectionParams($config) {
+ $type = $config->getSystemValue('dbtype', 'sqlite');
+
+ $connectionParams = array(
+ 'user' => $config->getSystemValue('dbuser', ''),
+ 'password' => $config->getSystemValue('dbpassword', ''),
+ );
+ $name = $config->getSystemValue('dbname', 'owncloud');
+
+ if ($this->normalizeType($type) === 'sqlite3') {
+ $datadir = $config->getSystemValue("datadirectory", \OC::$SERVERROOT . '/data');
+ $connectionParams['path'] = $datadir . '/' . $name . '.db';
+ } else {
+ $host = $config->getSystemValue('dbhost', '');
+ if (strpos($host, ':')) {
+ // Host variable may carry a port or socket.
+ list($host, $portOrSocket) = explode(':', $host, 2);
+ if (ctype_digit($portOrSocket)) {
+ $connectionParams['port'] = $portOrSocket;
+ } else {
+ $connectionParams['unix_socket'] = $portOrSocket;
+ }
+ }
+ $connectionParams['host'] = $host;
+ $connectionParams['dbname'] = $name;
+ }
+
+ $connectionParams['tablePrefix'] = $config->getSystemValue('dbtableprefix', 'oc_');
+
+ //additional driver options, eg. for mysql ssl
+ $driverOptions = $config->getSystemValue('dbdriveroptions', null);
+ if ($driverOptions) {
+ $connectionParams['driverOptions'] = $driverOptions;
+ }
+
+ return $connectionParams;
+ }
}
diff --git a/lib/private/db/connectionwrapper.php b/lib/private/db/connectionwrapper.php
deleted file mode 100644
index 132e76666ab..00000000000
--- a/lib/private/db/connectionwrapper.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Thomas Müller <deepdiver@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace OC\DB;
-
-
-class ConnectionWrapper implements \OCP\IDBConnection {
-
- private $connection;
-
- public function __construct(Connection $conn) {
- $this->connection = $conn;
- }
-
- /**
- * Used to the owncloud database access away
- * @param string $sql the sql query with ? placeholder for params
- * @param int $limit the maximum number of rows
- * @param int $offset from which row we want to start
- * @return \Doctrine\DBAL\Driver\Statement The prepared statement.
- */
- public function prepare($sql, $limit = null, $offset = null)
- {
- return $this->connection->prepare($sql, $limit, $offset);
- }
-
- /**
- * Used to get the id of the just inserted element
- * @param string $table the name of the table where we inserted the item
- * @return string the id of the inserted element
- */
- public function lastInsertId($table = null)
- {
- return $this->connection->lastInsertId($table);
- }
-
- /**
- * Insert a row if a matching row doesn't exists.
- * @param string $table The table name (will replace *PREFIX*) to perform the replace on.
- * @param array $input
- *
- * The input array if in the form:
- *
- * array ( 'id' => array ( 'value' => 6,
- * 'key' => true
- * ),
- * 'name' => array ('value' => 'Stoyan'),
- * 'family' => array ('value' => 'Stefanov'),
- * 'birth_date' => array ('value' => '1975-06-20')
- * );
- * @return bool
- *
- */
- public function insertIfNotExist($table, $input)
- {
- return $this->connection->insertIfNotExist($table, $input);
- }
-
- /**
- * Start a transaction
- * @return bool TRUE on success or FALSE on failure
- */
- public function beginTransaction()
- {
- return $this->connection->beginTransaction();
- }
-
- /**
- * Commit the database changes done during a transaction that is in progress
- * @return bool TRUE on success or FALSE on failure
- */
- public function commit()
- {
- return $this->connection->commit();
- }
-
- /**
- * Rollback the database changes done during a transaction that is in progress
- * @return bool TRUE on success or FALSE on failure
- */
- public function rollBack()
- {
- return $this->connection->rollBack();
- }
-
- /**
- * Gets the error code and message as a string for logging
- * @return string
- */
- public function getError()
- {
- return $this->connection->getError();
- }
-}
diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php
index a07c421b9b8..632e320576c 100644
--- a/lib/private/db/mdb2schemamanager.php
+++ b/lib/private/db/mdb2schemamanager.php
@@ -21,7 +21,7 @@ class MDB2SchemaManager {
protected $conn;
/**
- * @param \OC\DB\Connection $conn
+ * @param \OCP\IDBConnection $conn
*/
public function __construct($conn) {
$this->conn = $conn;
@@ -58,20 +58,21 @@ class MDB2SchemaManager {
* @return \OC\DB\Migrator
*/
public function getMigrator() {
+ $random = \OC::$server->getSecureRandom()->getMediumStrengthGenerator();
$platform = $this->conn->getDatabasePlatform();
if ($platform instanceof SqlitePlatform) {
$config = \OC::$server->getConfig();
- return new SQLiteMigrator($this->conn, $config);
+ return new SQLiteMigrator($this->conn, $random, $config);
} else if ($platform instanceof OraclePlatform) {
- return new OracleMigrator($this->conn);
+ return new OracleMigrator($this->conn, $random);
} else if ($platform instanceof MySqlPlatform) {
- return new MySQLMigrator($this->conn);
+ return new MySQLMigrator($this->conn, $random);
} else if ($platform instanceof SQLServerPlatform) {
- return new MsSqlMigrator($this->conn);
+ return new MsSqlMigrator($this->conn, $random);
} else if ($platform instanceof PostgreSqlPlatform) {
- return new Migrator($this->conn);
+ return new Migrator($this->conn, $random);
} else {
- return new NoCheckMigrator($this->conn);
+ return new NoCheckMigrator($this->conn, $random);
}
}
@@ -143,7 +144,7 @@ class MDB2SchemaManager {
}
/**
- * @param \Doctrine\DBAL\Schema\Schema $schema
+ * @param \Doctrine\DBAL\Schema\Schema|\Doctrine\DBAL\Schema\SchemaDiff $schema
* @return bool
*/
private function executeSchemaChange($schema) {
@@ -154,7 +155,8 @@ class MDB2SchemaManager {
$this->conn->commit();
if ($this->conn->getDatabasePlatform() instanceof SqlitePlatform) {
- \OC_DB::reconnect();
+ $this->conn->close();
+ $this->conn->connect();
}
return true;
}
diff --git a/lib/private/db/migrator.php b/lib/private/db/migrator.php
index d05f8455551..31c648a9b65 100644
--- a/lib/private/db/migrator.php
+++ b/lib/private/db/migrator.php
@@ -14,18 +14,27 @@ use \Doctrine\DBAL\Schema\Table;
use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig;
use \Doctrine\DBAL\Schema\Comparator;
+use OCP\Security\ISecureRandom;
class Migrator {
+
/**
* @var \Doctrine\DBAL\Connection $connection
*/
protected $connection;
/**
+ * @var ISecureRandom
+ */
+ private $random;
+
+ /**
* @param \Doctrine\DBAL\Connection $connection
+ * @param ISecureRandom $random
*/
- public function __construct(\Doctrine\DBAL\Connection $connection) {
+ public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random) {
$this->connection = $connection;
+ $this->random = $random;
}
/**
@@ -45,8 +54,7 @@ class Migrator {
$script = '';
$sqls = $schemaDiff->toSql($this->connection->getDatabasePlatform());
foreach ($sqls as $sql) {
- $script .= $sql . ';';
- $script .= PHP_EOL;
+ $script .= $this->convertStatementToScript($sql);
}
return $script;
@@ -84,7 +92,7 @@ class Migrator {
* @return string
*/
protected function generateTemporaryTableName($name) {
- return 'oc_' . $name . '_' . \OCP\Util::generateRandomBytes(13);
+ return 'oc_' . $name . '_' . $this->random->generate(13, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS);
}
/**
@@ -135,7 +143,7 @@ class Migrator {
$indexName = $index->getName();
} else {
// avoid conflicts in index names
- $indexName = 'oc_' . \OCP\Util::generateRandomBytes(13);
+ $indexName = 'oc_' . $this->random->generate(13, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS);
}
$newIndexes[] = new Index($indexName, $index->getColumns(), $index->isUnique(), $index->isPrimary());
}
@@ -201,4 +209,15 @@ class Migrator {
protected function dropTable($name) {
$this->connection->exec('DROP TABLE ' . $this->connection->quoteIdentifier($name));
}
+
+ /**
+ * @param $statement
+ * @return string
+ */
+ protected function convertStatementToScript($statement) {
+ $script = $statement . ';';
+ $script .= PHP_EOL;
+ $script .= PHP_EOL;
+ return $script;
+ }
}
diff --git a/lib/private/db/oraclemigrator.php b/lib/private/db/oraclemigrator.php
index 1a8df2def9c..b80295cbd60 100644
--- a/lib/private/db/oraclemigrator.php
+++ b/lib/private/db/oraclemigrator.php
@@ -37,4 +37,18 @@ class OracleMigrator extends NoCheckMigrator {
protected function generateTemporaryTableName($name) {
return 'oc_' . uniqid();
}
+
+ /**
+ * @param $statement
+ * @return string
+ */
+ protected function convertStatementToScript($statement) {
+ if (substr($statement, -1) === ';') {
+ return $statement . PHP_EOL . '/' . PHP_EOL;
+ }
+ $script = $statement . ';';
+ $script .= PHP_EOL;
+ $script .= PHP_EOL;
+ return $script;
+ }
}
diff --git a/lib/private/db/sqlitemigrator.php b/lib/private/db/sqlitemigrator.php
index 18e9d19d5ee..848e4986571 100644
--- a/lib/private/db/sqlitemigrator.php
+++ b/lib/private/db/sqlitemigrator.php
@@ -10,6 +10,7 @@ namespace OC\DB;
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Schema\Schema;
+use OCP\Security\ISecureRandom;
class SQLiteMigrator extends Migrator {
@@ -20,10 +21,11 @@ class SQLiteMigrator extends Migrator {
/**
* @param \Doctrine\DBAL\Connection $connection
+ * @param ISecureRandom $random
* @param \OCP\IConfig $config
*/
- public function __construct(\Doctrine\DBAL\Connection $connection, \OCP\IConfig $config) {
- parent::__construct($connection);
+ public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, \OCP\IConfig $config) {
+ parent::__construct($connection, $random);
$this->config = $config;
}
diff --git a/lib/private/db/statementwrapper.php b/lib/private/db/statementwrapper.php
index 93fabc147ca..ad63de98e93 100644
--- a/lib/private/db/statementwrapper.php
+++ b/lib/private/db/statementwrapper.php
@@ -89,9 +89,10 @@ class OC_DB_StatementWrapper {
$cArg = 0;
$inSubstring = false;
+ $queryLength = strlen($query);
// Create new query
- for ($i = 0; $i < strlen ($query); $i++) {
+ for ($i = 0; $i < $queryLength; $i++) {
if ($inSubstring == false) {
// Defines when we should start inserting values
if (substr ($query, $i, 9) == 'SUBSTRING') {
diff --git a/lib/private/diagnostics/event.php b/lib/private/diagnostics/event.php
new file mode 100644
index 00000000000..af5d2ff8840
--- /dev/null
+++ b/lib/private/diagnostics/event.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Diagnostics;
+
+use OCP\Diagnostics\IEvent;
+
+class Event implements IEvent {
+ /**
+ * @var string
+ */
+ protected $id;
+
+ /**
+ * @var float
+ */
+ protected $start;
+
+ /**
+ * @var float
+ */
+ protected $end;
+
+ /**
+ * @var string
+ */
+ protected $description;
+
+ /**
+ * @param string $id
+ * @param string $description
+ * @param float $start
+ */
+ public function __construct($id, $description, $start) {
+ $this->id = $id;
+ $this->description = $description;
+ $this->start = $start;
+ }
+
+ /**
+ * @param float $time
+ */
+ public function end($time) {
+ $this->end = $time;
+ }
+
+ /**
+ * @return float
+ */
+ public function getStart() {
+ return $this->start;
+ }
+
+ /**
+ * @return string
+ */
+ public function getId() {
+ return $this->id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDescription() {
+ return $this->description;
+ }
+
+ /**
+ * @return float
+ */
+ public function getEnd() {
+ return $this->end;
+ }
+
+ /**
+ * @return float
+ */
+ public function getDuration() {
+ if (!$this->end) {
+ $this->end = microtime(true);
+ }
+ return $this->end - $this->start;
+ }
+}
diff --git a/lib/private/diagnostics/eventlogger.php b/lib/private/diagnostics/eventlogger.php
new file mode 100644
index 00000000000..9e557ebd304
--- /dev/null
+++ b/lib/private/diagnostics/eventlogger.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Diagnostics;
+
+use OCP\Diagnostics\IEventLogger;
+
+class EventLogger implements IEventLogger {
+ /**
+ * @var \OC\Diagnostics\Event[]
+ */
+ private $events = array();
+
+ public function start($id, $description) {
+ $this->events[$id] = new Event($id, $description, microtime(true));
+ }
+
+ public function end($id) {
+ if (isset($this->events[$id])) {
+ $timing = $this->events[$id];
+ $timing->end(microtime(true));
+ }
+ }
+
+ public function log($id, $description, $start, $end) {
+ $this->events[$id] = new Event($id, $description, $start);
+ $this->events[$id]->end($end);
+ }
+
+ /**
+ * @return \OCP\Diagnostics\IEvent[]
+ */
+ public function getEvents() {
+ return $this->events;
+ }
+}
diff --git a/lib/private/diagnostics/nulleventlogger.php b/lib/private/diagnostics/nulleventlogger.php
new file mode 100644
index 00000000000..bf203cbfefd
--- /dev/null
+++ b/lib/private/diagnostics/nulleventlogger.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Diagnostics;
+
+use OCP\Diagnostics\IEventLogger;
+
+/**
+ * Dummy event logger that doesn't actually log anything
+ */
+class NullEventLogger implements IEventLogger {
+ /**
+ * Mark the start of an event
+ *
+ * @param $id
+ * @param $description
+ */
+ public function start($id, $description) {
+ }
+
+ /**
+ * Mark the end of an event
+ *
+ * @param $id
+ */
+ public function end($id) {
+ }
+
+ public function log($id, $description, $start, $end) {
+ }
+
+ /**
+ * @return \OCP\Diagnostics\IEvent[]
+ */
+ public function getEvents() {
+ return array();
+ }
+}
diff --git a/lib/private/diagnostics/nullquerylogger.php b/lib/private/diagnostics/nullquerylogger.php
new file mode 100644
index 00000000000..8467b4dd26c
--- /dev/null
+++ b/lib/private/diagnostics/nullquerylogger.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Diagnostics;
+
+use OCP\Diagnostics\IQueryLogger;
+
+class NullQueryLogger implements IQueryLogger {
+ /**
+ * @param string $sql
+ * @param array $params
+ * @param array $types
+ */
+ public function startQuery($sql, array $params = null, array $types = null) {
+ }
+
+ public function stopQuery() {
+ }
+
+ /**
+ * @return \OCP\Diagnostics\IQuery[]
+ */
+ public function getQueries() {
+ return array();
+ }
+}
diff --git a/lib/private/diagnostics/query.php b/lib/private/diagnostics/query.php
new file mode 100644
index 00000000000..d50d7592636
--- /dev/null
+++ b/lib/private/diagnostics/query.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Diagnostics;
+
+use OCP\Diagnostics\IQuery;
+
+class Query implements IQuery {
+ private $sql;
+
+ private $params;
+
+ private $start;
+
+ private $end;
+
+ /**
+ * @param string $sql
+ * @param array $params
+ * @param int $start
+ */
+ public function __construct($sql, $params, $start) {
+ $this->sql = $sql;
+ $this->params = $params;
+ $this->start = $start;
+ }
+
+ public function end($time) {
+ $this->end = $time;
+ }
+
+ /**
+ * @return array
+ */
+ public function getParams() {
+ return $this->params;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSql() {
+ return $this->sql;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDuration() {
+ return $this->end - $this->start;
+ }
+}
diff --git a/lib/private/diagnostics/querylogger.php b/lib/private/diagnostics/querylogger.php
new file mode 100644
index 00000000000..1f80f907173
--- /dev/null
+++ b/lib/private/diagnostics/querylogger.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Diagnostics;
+
+use OCP\Diagnostics\IQueryLogger;
+
+class QueryLogger implements IQueryLogger {
+ /**
+ * @var \OC\Diagnostics\Query
+ */
+ protected $activeQuery;
+
+ /**
+ * @var \OC\Diagnostics\Query[]
+ */
+ protected $queries = array();
+
+ /**
+ * @param string $sql
+ * @param array $params
+ * @param array $types
+ */
+ public function startQuery($sql, array $params = null, array $types = null) {
+ $this->activeQuery = new Query($sql, $params, microtime(true));
+ }
+
+ public function stopQuery() {
+ if ($this->activeQuery) {
+ $this->activeQuery->end(microtime(true));
+ $this->queries[] = $this->activeQuery;
+ $this->activeQuery = null;
+ }
+ }
+
+ /**
+ * @return \OCP\Diagnostics\IQuery[]
+ */
+ public function getQueries() {
+ return $this->queries;
+ }
+}
diff --git a/lib/private/files.php b/lib/private/files.php
index a983f6f32f5..571d3215caa 100644
--- a/lib/private/files.php
+++ b/lib/private/files.php
@@ -195,7 +195,7 @@ class OC_Files {
* @param ZipStreamer $zip
* @param string $internalDir
*/
- public static function zipAddDir($dir, $zip, $internalDir='') {
+ public static function zipAddDir($dir, ZipStreamer $zip, $internalDir='') {
$dirname=basename($dir);
$rootDir = $internalDir.$dirname;
if (!empty($rootDir)) {
diff --git a/lib/private/files/mount/manager.php b/lib/private/files/mount/manager.php
index e5180cfe173..0ccf42941de 100644
--- a/lib/private/files/mount/manager.php
+++ b/lib/private/files/mount/manager.php
@@ -19,7 +19,7 @@ class Manager {
/**
* @param Mount $mount
*/
- public function addMount($mount) {
+ public function addMount(Mount $mount) {
$this->mounts[$mount->getMountPoint()] = $mount;
}
diff --git a/lib/private/files/objectstore/homeobjectstorestorage.php b/lib/private/files/objectstore/homeobjectstorestorage.php
index 947fc496b20..14fc604a7f0 100644
--- a/lib/private/files/objectstore/homeobjectstorestorage.php
+++ b/lib/private/files/objectstore/homeobjectstorestorage.php
@@ -34,12 +34,6 @@ class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IH
}
$this->user = $params['user'];
parent::__construct($params);
-
-
- //initialize cache with root directory in cache
- if ( ! $this->is_dir('files') ) {
- $this->mkdir('files');
- }
}
public function getId () {
diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php
index 241864bcccd..ae8bff52896 100644
--- a/lib/private/files/objectstore/objectstorestorage.php
+++ b/lib/private/files/objectstore/objectstorestorage.php
@@ -349,7 +349,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
public function writeBack($tmpFile) {
if (!isset(self::$tmpFiles[$tmpFile])) {
- return false;
+ return;
}
$path = self::$tmpFiles[$tmpFile];
@@ -375,9 +375,8 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
} catch (\Exception $ex) {
$this->getCache()->remove($path);
\OCP\Util::writeLog('objectstore', 'Could not create object: ' . $ex->getMessage(), \OCP\Util::ERROR);
- return false;
+ throw $ex; // make this bubble up
}
- return true;
}
/**
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php
index 0a612ae505b..1c5fafc12fa 100644
--- a/lib/private/files/storage/local.php
+++ b/lib/private/files/storage/local.php
@@ -90,6 +90,7 @@ if (\OC_Util::runningOnWindows()) {
}
public function stat($path) {
+ clearstatcache();
$fullPath = $this->datadir . $path;
$statResult = stat($fullPath);
if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
@@ -276,5 +277,25 @@ if (\OC_Util::runningOnWindows()) {
public function isLocal() {
return true;
}
+
+ /**
+ * get the ETag for a file or folder
+ *
+ * @param string $path
+ * @return string
+ */
+ public function getETag($path) {
+ if ($this->is_file($path)) {
+ $stat = $this->stat($path);
+ return md5(
+ $stat['mtime'] .
+ $stat['ino'] .
+ $stat['dev'] .
+ $stat['size']
+ );
+ } else {
+ return parent::getETag($path);
+ }
+ }
}
}
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 95f3e9a2c7f..3d3406af94e 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -1110,6 +1110,16 @@ class View {
}
/**
+ * search for files with the name matching $query
+ *
+ * @param string $query
+ * @return FileInfo[]
+ */
+ public function searchRaw($query) {
+ return $this->searchCommon($query, 'search');
+ }
+
+ /**
* search for files by mimetype
*
* @param string $mimetype
diff --git a/lib/private/group/manager.php b/lib/private/group/manager.php
index 58a23924872..417be79ab30 100644
--- a/lib/private/group/manager.php
+++ b/lib/private/group/manager.php
@@ -48,6 +48,7 @@ class Manager extends PublicEmitter implements IGroupManager {
*/
private $cachedUserGroups = array();
+
/**
* @param \OC\User\Manager $userManager
*/
@@ -180,18 +181,24 @@ class Manager extends PublicEmitter implements IGroupManager {
$groups[$groupId] = $this->get($groupId);
}
}
- $this->cachedUserGroups[$uid] = array_values($groups);
+ $this->cachedUserGroups[$uid] = $groups;
return $this->cachedUserGroups[$uid];
}
+
/**
+ * get a list of group ids for a user
* @param \OC\User\User $user
- * @return array with group names
+ * @return array with group ids
*/
public function getUserGroupIds($user) {
$groupIds = array();
- foreach ($this->backends as $backend) {
- $groupIds = array_merge($groupIds, $backend->getUserGroups($user->getUID()));
-
+ $userId = $user->getUID();
+ if (isset($this->cachedUserGroups[$userId])) {
+ return array_keys($this->cachedUserGroups[$userId]);
+ } else {
+ foreach ($this->backends as $backend) {
+ $groupIds = array_merge($groupIds, $backend->getUserGroups($userId));
+ }
}
return $groupIds;
}
@@ -216,10 +223,9 @@ class Manager extends PublicEmitter implements IGroupManager {
if(!empty($search)) {
// only user backends have the capability to do a complex search for users
$searchOffset = 0;
+ $searchLimit = $limit * 100;
if($limit === -1) {
- $searchLimit = $group->count('');
- } else {
- $searchLimit = $limit * 2;
+ $searchLimit = 500;
}
do {
@@ -230,7 +236,7 @@ class Manager extends PublicEmitter implements IGroupManager {
}
}
$searchOffset += $searchLimit;
- } while(count($groupUsers) < $searchLimit+$offset && count($filteredUsers) === $searchLimit);
+ } while(count($groupUsers) < $searchLimit+$offset && count($filteredUsers) >= $searchLimit);
if($limit === -1) {
$groupUsers = array_slice($groupUsers, $offset);
diff --git a/lib/private/helper.php b/lib/private/helper.php
index ea91cc57516..5b1d31bfc59 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -25,7 +25,6 @@
* Collection of useful functions
*/
class OC_Helper {
- private static $tmpFiles = array();
private static $mimetypeIcons = array();
private static $mimetypeDetector;
private static $templateManager;
@@ -280,6 +279,21 @@ class OC_Helper {
}
/**
+ * shows whether the user has an avatar
+ * @param string $user username
+ * @return bool avatar set or not
+ **/
+ public static function userAvatarSet($user) {
+ $avatar = new \OC_Avatar($user);
+ $image = $avatar->get(1);
+ if ($image instanceof \OC_Image) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Make a human file size
* @param int $bytes file size in bytes
* @return string a human readable file size
@@ -402,9 +416,10 @@ class OC_Helper {
/**
* Recursive deletion of folders
* @param string $dir path to the folder
+ * @param bool $deleteSelf if set to false only the content of the folder will be deleted
* @return bool
*/
- static function rmdirr($dir) {
+ static function rmdirr($dir, $deleteSelf = true) {
if (is_dir($dir)) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
@@ -419,15 +434,19 @@ class OC_Helper {
unlink($fileInfo->getRealPath());
}
}
- rmdir($dir);
+ if ($deleteSelf) {
+ rmdir($dir);
+ }
} elseif (file_exists($dir)) {
- unlink($dir);
+ if ($deleteSelf) {
+ unlink($dir);
+ }
}
- if (file_exists($dir)) {
- return false;
- } else {
+ if (!$deleteSelf) {
return true;
}
+
+ return !file_exists($dir);
}
/**
@@ -573,136 +592,24 @@ class OC_Helper {
*
* @param string $postfix
* @return string
+ * @deprecated Use the TempManager instead
*
* temporary files are automatically cleaned up after the script is finished
*/
public static function tmpFile($postfix = '') {
- $file = get_temp_dir() . '/' . md5(time() . rand()) . $postfix;
- $fh = fopen($file, 'w');
- if ($fh!==false){
- fclose($fh);
- self::$tmpFiles[] = $file;
- } else {
- OC_Log::write(
- 'OC_Helper',
- sprintf(
- 'Can not create a temporary file in directory %s. Check it exists and has correct permissions',
- get_temp_dir()
- ),
- OC_Log::WARN
- );
- $file = false;
- }
- return $file;
- }
-
- /**
- * move a file to oc-noclean temp dir
- *
- * @param string $filename
- * @return mixed
- *
- */
- public static function moveToNoClean($filename = '') {
- if ($filename == '') {
- return false;
- }
- $tmpDirNoClean = get_temp_dir() . '/oc-noclean/';
- if (!file_exists($tmpDirNoClean) || !is_dir($tmpDirNoClean)) {
- if (file_exists($tmpDirNoClean)) {
- unlink($tmpDirNoClean);
- }
- mkdir($tmpDirNoClean);
- }
- $newname = $tmpDirNoClean . basename($filename);
- if (rename($filename, $newname)) {
- return $newname;
- } else {
- return false;
- }
+ return \OC::$server->getTempManager()->getTemporaryFile($postfix);
}
/**
* create a temporary folder with an unique filename
*
* @return string
+ * @deprecated Use the TempManager instead
*
* temporary files are automatically cleaned up after the script is finished
*/
public static function tmpFolder() {
- $path = get_temp_dir() . DIRECTORY_SEPARATOR . md5(time() . rand());
- mkdir($path);
- self::$tmpFiles[] = $path;
- return $path . DIRECTORY_SEPARATOR;
- }
-
- /**
- * remove all files created by self::tmpFile
- */
- public static function cleanTmp() {
- $leftoversFile = get_temp_dir() . '/oc-not-deleted';
- if (file_exists($leftoversFile)) {
- $leftovers = file($leftoversFile);
- foreach ($leftovers as $file) {
- try {
- self::rmdirr($file);
- } catch (UnexpectedValueException $ex) {
- // not really much we can do here anymore
- if (!is_null(\OC::$server)) {
- $message = $ex->getMessage();
- \OC::$server->getLogger()->error("Error deleting file/folder: $file - Reason: $message",
- array('app' => 'core'));
- }
- }
- }
- unlink($leftoversFile);
- }
-
- foreach (self::$tmpFiles as $file) {
- if (file_exists($file)) {
- try {
- if (!self::rmdirr($file)) {
- file_put_contents($leftoversFile, $file . "\n", FILE_APPEND);
- }
- } catch (UnexpectedValueException $ex) {
- // not really much we can do here anymore
- if (!is_null(\OC::$server)) {
- $message = $ex->getMessage();
- \OC::$server->getLogger()->error("Error deleting file/folder: $file - Reason: $message",
- array('app' => 'core'));
- }
- }
- }
- }
- }
-
- /**
- * remove all files in PHP /oc-noclean temp dir
- */
- public static function cleanTmpNoClean() {
- $tmpDirNoCleanName=get_temp_dir() . '/oc-noclean/';
- if(file_exists($tmpDirNoCleanName) && is_dir($tmpDirNoCleanName)) {
- $files=scandir($tmpDirNoCleanName);
- foreach($files as $file) {
- $fileName = $tmpDirNoCleanName . $file;
- if (!\OC\Files\Filesystem::isIgnoredDir($file) && filemtime($fileName) + 600 < time()) {
- unlink($fileName);
- }
- }
- // if oc-noclean is empty delete it
- $isTmpDirNoCleanEmpty = true;
- $tmpDirNoClean = opendir($tmpDirNoCleanName);
- if(is_resource($tmpDirNoClean)) {
- while (false !== ($file = readdir($tmpDirNoClean))) {
- if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
- $isTmpDirNoCleanEmpty = false;
- }
- }
- }
- if ($isTmpDirNoCleanEmpty) {
- rmdir($tmpDirNoCleanName);
- }
- }
+ return \OC::$server->getTempManager()->getTemporaryFolder();
}
/**
diff --git a/lib/private/l10n.php b/lib/private/l10n.php
index 57886a796cd..0b20eafea32 100644
--- a/lib/private/l10n.php
+++ b/lib/private/l10n.php
@@ -62,16 +62,6 @@ class OC_L10N implements \OCP\IL10N {
private $plural_form_function = null;
/**
- * Localization
- */
- private $localizations = array(
- 'jsdate' => 'dd.mm.yy',
- 'date' => '%d.%m.%Y',
- 'datetime' => '%d.%m.%Y %H:%M:%S',
- 'time' => '%H:%M:%S',
- 'firstday' => 0);
-
- /**
* get an L10N instance
* @param string $app
* @param string|null $lang
@@ -126,13 +116,10 @@ class OC_L10N implements \OCP\IL10N {
// Use cache if possible
if(array_key_exists($app.'::'.$lang, self::$cache)) {
-
$this->translations = self::$cache[$app.'::'.$lang]['t'];
- $this->localizations = self::$cache[$app.'::'.$lang]['l'];
- }
- else{
+ } else{
$i18ndir = self::findI18nDir($app);
- // Localization is in /l10n, Texts are in $i18ndir
+ // Texts are in $i18ndir
// (Just no need to define date/time format etc. twice)
if((OC_Helper::isSubDirectory($i18ndir.$lang.'.php', OC::$SERVERROOT.'/core/l10n/')
|| OC_Helper::isSubDirectory($i18ndir.$lang.'.php', OC::$SERVERROOT.'/lib/l10n/')
@@ -162,16 +149,7 @@ class OC_L10N implements \OCP\IL10N {
}
}
- if(file_exists(OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php') && OC_Helper::isSubDirectory(OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php', OC::$SERVERROOT.'/core/l10n/')) {
- // Include the file, save the data from $CONFIG
- include OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php';
- if(isset($LOCALIZATIONS) && is_array($LOCALIZATIONS)) {
- $this->localizations = array_merge($this->localizations, $LOCALIZATIONS);
- }
- }
-
self::$cache[$app.'::'.$lang]['t'] = $this->translations;
- self::$cache[$app.'::'.$lang]['l'] = $this->localizations;
}
}
@@ -313,17 +291,6 @@ class OC_L10N implements \OCP\IL10N {
}
/**
- * get localizations
- * @return array Fetch all localizations
- *
- * Returns an associative array with all localizations
- */
- public function getLocalizations() {
- $this->init();
- return $this->localizations;
- }
-
- /**
* Localization
* @param string $type Type of localization
* @param array|int|string $data parameters for this localization
@@ -334,45 +301,45 @@ class OC_L10N implements \OCP\IL10N {
* Implemented types:
* - date
* - Creates a date
- * - l10n-field: date
* - params: timestamp (int/string)
* - datetime
* - Creates date and time
- * - l10n-field: datetime
* - params: timestamp (int/string)
* - time
* - Creates a time
- * - l10n-field: time
* - params: timestamp (int/string)
*/
- public function l($type, $data) {
+ public function l($type, $data, $options = array()) {
+ if ($type === 'firstday') {
+ return $this->getFirstWeekDay();
+ }
+ if ($type === 'jsdate') {
+ return $this->getDateFormat();
+ }
+
$this->init();
+ $value = new DateTime();
+ if($data instanceof DateTime) {
+ $value = $data;
+ } elseif(is_string($data) && !is_numeric($data)) {
+ $data = strtotime($data);
+ $value->setTimestamp($data);
+ } else {
+ $value->setTimestamp($data);
+ }
+ $locale = self::findLanguage();
+ $options = array_merge(array('width' => 'long'), $options);
+ $width = $options['width'];
switch($type) {
- // If you add something don't forget to add it to $localizations
- // at the top of the page
case 'date':
+ return Punic\Calendar::formatDate($value, $width, $locale);
+ break;
case 'datetime':
+ return Punic\Calendar::formatDatetime($value, $width, $locale);
+ break;
case 'time':
- if($data instanceof DateTime) {
- $data = $data->getTimestamp();
- } elseif(is_string($data) && !is_numeric($data)) {
- $data = strtotime($data);
- }
- $locales = array(self::findLanguage());
- if (strlen($locales[0]) == 2) {
- $locales[] = $locales[0].'_'.strtoupper($locales[0]);
- }
- setlocale(LC_TIME, $locales);
- $format = $this->localizations[$type];
- // Check for Windows to find and replace the %e modifier correctly
- if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
- $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
- }
- return strftime($format, $data);
+ return Punic\Calendar::formatTime($value, $width, $locale);
break;
- case 'firstday':
- case 'jsdate':
- return $this->localizations[$type];
default:
return false;
}
@@ -495,7 +462,7 @@ class OC_L10N implements \OCP\IL10N {
/**
* find the l10n directory
* @param string $app App that needs to be translated
- * @return directory
+ * @return string directory
*/
protected static function findI18nDir($app) {
// find the i18n dir
@@ -547,4 +514,21 @@ class OC_L10N implements \OCP\IL10N {
}
return false;
}
+
+ /**
+ * @return string
+ * @throws \Punic\Exception\ValueNotInList
+ */
+ public function getDateFormat() {
+ $locale = self::findLanguage();
+ return Punic\Calendar::getDateFormat('short', $locale);
+ }
+
+ /**
+ * @return int
+ */
+ public function getFirstWeekDay() {
+ $locale = self::findLanguage();
+ return Punic\Calendar::getFirstWeekday($locale);
+ }
}
diff --git a/lib/private/legacy/updater.php b/lib/private/legacy/updater.php
deleted file mode 100644
index 190748066c6..00000000000
--- a/lib/private/legacy/updater.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-/**
- * provides an interface to all search providers
- *
- * @deprecated use \OC\Updater instead
- */
-class OC_Updater {
- public static function check() {
- $updater = new \OC\Updater();
- return $updater->check('http://apps.owncloud.com/updater.php');
- }
-}
diff --git a/lib/private/migrate.php b/lib/private/migrate.php
index 8d88181ca19..8351155aa55 100644
--- a/lib/private/migrate.php
+++ b/lib/private/migrate.php
@@ -62,7 +62,7 @@ class OC_Migrate{
foreach($apps as $app) {
$path = OC_App::getAppPath($app) . '/appinfo/migrate.php';
if( file_exists( $path ) ) {
- include $path;
+ include_once $path;
}
}
}
diff --git a/lib/private/ocsclient.php b/lib/private/ocsclient.php
index 8ceb43f4c1f..351027d8018 100644
--- a/lib/private/ocsclient.php
+++ b/lib/private/ocsclient.php
@@ -129,8 +129,9 @@ class OC_OCSClient{
$data = simplexml_load_string($xml);
libxml_disable_entity_loader($loadEntities);
- $tmp=$data->data->content;
- for($i = 0; $i < count($tmp); $i++) {
+ $tmp = $data->data->content;
+ $tmpCount = count($tmp);
+ for($i = 0; $i < $tmpCount; $i++) {
$app=array();
$app['id']=(string)$tmp[$i]->id;
$app['name']=(string)$tmp[$i]->name;
diff --git a/lib/private/preferences.php b/lib/private/preferences.php
index a849cc23e1a..cdaa207449d 100644
--- a/lib/private/preferences.php
+++ b/lib/private/preferences.php
@@ -36,7 +36,7 @@
namespace OC;
-use \OC\DB\Connection;
+use OCP\IDBConnection;
/**
@@ -61,9 +61,9 @@ class Preferences {
protected $cache = array();
/**
- * @param \OC\DB\Connection $conn
+ * @param \OCP\IDBConnection $conn
*/
- public function __construct(Connection $conn) {
+ public function __construct(IDBConnection $conn) {
$this->conn = $conn;
}
diff --git a/lib/private/preview.php b/lib/private/preview.php
index e9bfb3b9285..dbbe173bf80 100755..100644
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -779,7 +779,7 @@ class Preview {
* @param \OC\Files\FileInfo $file
* @return bool
*/
- public static function isAvailable($file) {
+ public static function isAvailable(\OC\Files\FileInfo $file) {
if (!\OC_Config::getValue('enable_previews', true)) {
return false;
}
@@ -814,8 +814,18 @@ class Preview {
self::initProviders();
}
- foreach (self::$providers as $supportedMimeType => $provider) {
- if (preg_match($supportedMimeType, $mimeType)) {
+ // FIXME: Ugly hack to prevent SVG of being returned if the SVG
+ // provider is not enabled.
+ // This is required because the preview system is designed in a
+ // bad way and relies on opt-in with asterisks (i.e. image/*)
+ // which will lead to the fact that a SVG will also match the image
+ // provider.
+ if($mimeType === 'image/svg+xml' && !array_key_exists('/image\/svg\+xml/', self::$providers)) {
+ return false;
+ }
+
+ foreach(self::$providers as $supportedMimetype => $provider) {
+ if(preg_match($supportedMimetype, $mimeType)) {
return true;
}
}
diff --git a/lib/private/previewmanager.php b/lib/private/previewmanager.php
index 85bf609743d..85bf609743d 100755..100644
--- a/lib/private/previewmanager.php
+++ b/lib/private/previewmanager.php
diff --git a/lib/private/repair.php b/lib/private/repair.php
index c7db8b2617d..081aeb32c66 100644
--- a/lib/private/repair.php
+++ b/lib/private/repair.php
@@ -10,6 +10,13 @@ namespace OC;
use OC\Hooks\BasicEmitter;
use OC\Hooks\Emitter;
+use OC\Repair\AssetCache;
+use OC\Repair\Collation;
+use OC\Repair\InnoDB;
+use OC\Repair\RepairConfig;
+use OC\Repair\RepairLegacyStorages;
+use OC\Repair\RepairMimeTypes;
+use OC\Repair\SearchLuceneTables;
class Repair extends BasicEmitter {
/**
@@ -69,9 +76,10 @@ class Repair extends BasicEmitter {
*/
public static function getRepairSteps() {
return array(
- new \OC\Repair\RepairMimeTypes(),
- new \OC\Repair\RepairLegacyStorages(\OC::$server->getConfig(), \OC_DB::getConnection()),
- new \OC\Repair\RepairConfig(),
+ new RepairMimeTypes(),
+ new RepairLegacyStorages(\OC::$server->getConfig(), \OC_DB::getConnection()),
+ new RepairConfig(),
+ new AssetCache()
);
}
@@ -83,14 +91,14 @@ class Repair extends BasicEmitter {
*/
public static function getBeforeUpgradeRepairSteps() {
$steps = array(
- new \OC\Repair\InnoDB(),
- new \OC\Repair\Collation(\OC::$server->getConfig(), \OC_DB::getConnection()),
- new \OC\Repair\SearchLuceneTables()
+ new InnoDB(),
+ new Collation(\OC::$server->getConfig(), \OC_DB::getConnection()),
+ new SearchLuceneTables()
);
//There is no need to delete all previews on every single update
- //only 7.0.0 thru 7.0.2 generated broken previews
- $currentVersion = \OC_Config::getValue('version');
+ //only 7.0.0 through 7.0.2 generated broken previews
+ $currentVersion = \OC::$server->getConfig()->getSystemValue('version');
if (version_compare($currentVersion, '7.0.0.0', '>=') &&
version_compare($currentVersion, '7.0.2.2', '<=')) {
$steps[] = new \OC\Repair\Preview();
@@ -102,7 +110,7 @@ class Repair extends BasicEmitter {
/**
* {@inheritDoc}
*
- * Redeclared as public to allow invocation from within the closure above in php 5.3
+ * Re-declared as public to allow invocation from within the closure above in php 5.3
*/
public function emit($scope, $method, $arguments = array()) {
parent::emit($scope, $method, $arguments);
diff --git a/lib/private/request.php b/lib/private/request.php
index fa446837a97..1cfa4a150c5 100755..100644
--- a/lib/private/request.php
+++ b/lib/private/request.php
@@ -245,7 +245,7 @@ class OC_Request {
* @return string Path info or false when not found
*/
public static function getRawPathInfo() {
- $requestUri = $_SERVER['REQUEST_URI'];
+ $requestUri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
// remove too many leading slashes - can be caused by reverse proxy configuration
if (strpos($requestUri, '/') === 0) {
$requestUri = '/' . ltrim($requestUri, '/');
diff --git a/lib/private/route/router.php b/lib/private/route/router.php
index aa3d05dcb85..645d6141964 100644
--- a/lib/private/route/router.php
+++ b/lib/private/route/router.php
@@ -106,6 +106,7 @@ class Router implements IRouter {
* @return void
*/
public function loadRoutes($app = null) {
+ $requestedApp = $app;
if ($this->loaded) {
return;
}
@@ -123,6 +124,7 @@ class Router implements IRouter {
$routingFiles = array();
}
}
+ \OC::$server->getEventLogger()->start('loadroutes' . $requestedApp, 'Loading Routes');
foreach ($routingFiles as $app => $file) {
if (!isset($this->loadedApps[$app])) {
$this->loadedApps[$app] = true;
@@ -145,6 +147,7 @@ class Router implements IRouter {
$collection->addPrefix('/ocs');
$this->root->addCollection($collection);
}
+ \OC::$server->getEventLogger()->end('loadroutes' . $requestedApp);
}
/**
@@ -236,6 +239,7 @@ class Router implements IRouter {
}
}
+ \OC::$server->getEventLogger()->start('run_route', 'Run route');
if (isset($parameters['action'])) {
$action = $parameters['action'];
if (!is_callable($action)) {
@@ -249,6 +253,7 @@ class Router implements IRouter {
} else {
throw new \Exception('no action available');
}
+ \OC::$server->getEventLogger()->end('run_route');
}
/**
diff --git a/lib/private/server.php b/lib/private/server.php
index 7fa06298b29..186714740f7 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -6,14 +6,19 @@ use OC\AppFramework\Http\Request;
use OC\AppFramework\Db\Db;
use OC\AppFramework\Utility\SimpleContainer;
use OC\Cache\UserCache;
+use OC\Diagnostics\NullQueryLogger;
+use OC\Diagnostics\EventLogger;
+use OC\Diagnostics\QueryLogger;
use OC\Security\CertificateManager;
use OC\DB\ConnectionWrapper;
use OC\Files\Node\Root;
use OC\Files\View;
use OC\Security\Crypto;
use OC\Security\SecureRandom;
+use OC\Diagnostics\NullEventLogger;
use OCP\IServerContainer;
use OCP\ISession;
+use OC\Tagging\TagMapper;
/**
* Class Server
@@ -23,7 +28,6 @@ use OCP\ISession;
* TODO: hookup all manager classes
*/
class Server extends SimpleContainer implements IServerContainer {
-
function __construct() {
$this->registerService('ContactsManager', function ($c) {
return new ContactsManager();
@@ -58,8 +62,8 @@ class Server extends SimpleContainer implements IServerContainer {
'env' => $_ENV,
'cookies' => $_COOKIE,
'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
- ? $_SERVER['REQUEST_METHOD']
- : null,
+ ? $_SERVER['REQUEST_METHOD']
+ : null,
'urlParams' => $urlParams,
'requesttoken' => $requestToken,
), $stream
@@ -68,11 +72,15 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('PreviewManager', function ($c) {
return new PreviewManager();
});
- $this->registerService('TagManager', function ($c) {
+ $this->registerService('TagMapper', function(Server $c) {
+ return new TagMapper($c->getDb());
+ });
+ $this->registerService('TagManager', function (Server $c) {
+ $tagMapper = $c->query('TagMapper');
$user = \OC_User::getUser();
- return new TagManager($user);
+ return new TagManager($tagMapper, $user);
});
- $this->registerService('RootFolder', function ($c) {
+ $this->registerService('RootFolder', function (Server $c) {
// TODO: get user and user manager from container as well
$user = \OC_User::getUser();
/** @var $c SimpleContainer */
@@ -82,28 +90,16 @@ class Server extends SimpleContainer implements IServerContainer {
$view = new View();
return new Root($manager, $view, $user);
});
- $this->registerService('UserManager', function ($c) {
- /**
- * @var SimpleContainer $c
- * @var \OC\AllConfig $config
- */
- $config = $c->query('AllConfig');
+ $this->registerService('UserManager', function (Server $c) {
+ $config = $c->getConfig();
return new \OC\User\Manager($config);
});
- $this->registerService('GroupManager', function ($c) {
- /**
- * @var SimpleContainer $c
- * @var \OC\User\Manager $userManager
- */
- $userManager = $c->query('UserManager');
+ $this->registerService('GroupManager', function (Server $c) {
+ $userManager = $c->getUserManager();
return new \OC\Group\Manager($userManager);
});
- $this->registerService('UserSession', function ($c) {
- /**
- * @var SimpleContainer $c
- * @var \OC\User\Manager $manager
- */
- $manager = $c->query('UserManager');
+ $this->registerService('UserSession', function (Server $c) {
+ $manager = $c->getUserManager();
$userSession = new \OC\User\Session($manager, new \OC\Session\Memory(''));
$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
\OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
@@ -152,9 +148,8 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('L10NFactory', function ($c) {
return new \OC\L10N\Factory();
});
- $this->registerService('URLGenerator', function ($c) {
- /** @var $c SimpleContainer */
- $config = $c->query('AllConfig');
+ $this->registerService('URLGenerator', function (Server $c) {
+ $config = $c->getConfig();
return new \OC\URLGenerator($config);
});
$this->registerService('AppHelper', function ($c) {
@@ -173,25 +168,18 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('AvatarManager', function ($c) {
return new AvatarManager();
});
- $this->registerService('Logger', function ($c) {
- /** @var $c SimpleContainer */
+ $this->registerService('Logger', function (Server $c) {
$logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud');
$logger = 'OC_Log_' . ucfirst($logClass);
call_user_func(array($logger, 'init'));
return new Log($logger);
});
- $this->registerService('JobList', function ($c) {
- /**
- * @var Server $c
- */
+ $this->registerService('JobList', function (Server $c) {
$config = $c->getConfig();
return new \OC\BackgroundJob\JobList($c->getDatabaseConnection(), $config);
});
- $this->registerService('Router', function ($c) {
- /**
- * @var Server $c
- */
+ $this->registerService('Router', function (Server $c) {
$cacheFactory = $c->getMemCacheFactory();
if ($cacheFactory->isAvailable()) {
$router = new \OC\Route\CachingRouter($cacheFactory->create('route'));
@@ -203,19 +191,48 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('Search', function ($c) {
return new Search();
});
- $this->registerService('SecureRandom', function($c) {
+ $this->registerService('SecureRandom', function ($c) {
return new SecureRandom();
});
- $this->registerService('Crypto', function($c) {
- return new Crypto(\OC::$server->getConfig(), \OC::$server->getSecureRandom());
+ $this->registerService('Crypto', function (Server $c) {
+ return new Crypto($c->getConfig(), $c->getSecureRandom());
+ });
+ $this->registerService('DatabaseConnection', function (Server $c) {
+ $factory = new \OC\DB\ConnectionFactory();
+ $type = $c->getConfig()->getSystemValue('dbtype', 'sqlite');
+ if (!$factory->isValidType($type)) {
+ throw new \DatabaseException('Invalid database type');
+ }
+ $connectionParams = $factory->createConnectionParams($c->getConfig());
+ $connection = $factory->getConnection($type, $connectionParams);
+ $connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
+ return $connection;
});
- $this->registerService('Db', function ($c) {
- return new Db();
+ $this->registerService('Db', function (Server $c) {
+ return new Db($c->getDatabaseConnection());
});
- $this->registerService('HTTPHelper', function (SimpleContainer $c) {
- $config = $c->query('AllConfig');
+ $this->registerService('HTTPHelper', function (Server $c) {
+ $config = $c->getConfig();
return new HTTPHelper($config);
});
+ $this->registerService('EventLogger', function (Server $c) {
+ if (defined('DEBUG') and DEBUG) {
+ return new EventLogger();
+ } else {
+ return new NullEventLogger();
+ }
+ });
+ $this->registerService('QueryLogger', function ($c) {
+ if (defined('DEBUG') and DEBUG) {
+ return new QueryLogger();
+ } else {
+ return new NullQueryLogger();
+ }
+ });
+ $this->registerService('TempManager', function ($c) {
+ /** @var Server $c */
+ return new TempManager(get_temp_dir(), $c->getLogger());
+ });
}
/**
@@ -280,12 +297,14 @@ class Server extends SimpleContainer implements IServerContainer {
* @return \OCP\Files\Folder
*/
function getUserFolder($userId = null) {
- if($userId === null) {
+ if ($userId === null) {
$user = $this->getUserSession()->getUser();
if (!$user) {
return null;
}
$userId = $user->getUID();
+ } else {
+ $user = $this->getUserManager()->get($userId);
}
$dir = '/' . $userId;
$root = $this->getRootFolder();
@@ -300,6 +319,19 @@ class Server extends SimpleContainer implements IServerContainer {
$dir = '/files';
if (!$folder->nodeExists($dir)) {
$folder = $folder->newFolder($dir);
+
+ if (\OCP\App::isEnabled('files_encryption')) {
+ // disable encryption proxy to prevent recursive calls
+ $proxyStatus = \OC_FileProxy::$enabled;
+ \OC_FileProxy::$enabled = false;
+ }
+
+ \OC_Util::copySkeleton($user, $folder);
+
+ if (\OCP\App::isEnabled('files_encryption')) {
+ // re-enable proxy - our work is done
+ \OC_FileProxy::$enabled = $proxyStatus;
+ }
} else {
$folder = $folder->get($dir);
}
@@ -431,7 +463,7 @@ class Server extends SimpleContainer implements IServerContainer {
* @return \OCP\IDBConnection
*/
function getDatabaseConnection() {
- return new ConnectionWrapper(\OC_DB::getConnection());
+ return $this->query('DatabaseConnection');
}
/**
@@ -508,6 +540,7 @@ class Server extends SimpleContainer implements IServerContainer {
/**
* Returns an instance of the HTTP helper class
+ *
* @return \OC\HTTPHelper
*/
function getHTTPHelper() {
@@ -539,4 +572,35 @@ class Server extends SimpleContainer implements IServerContainer {
function createEventSource() {
return new \OC_EventSource();
}
+
+ /**
+ * Get the active event logger
+ *
+ * The returned logger only logs data when debug mode is enabled
+ *
+ * @return \OCP\Diagnostics\IEventLogger
+ */
+ function getEventLogger() {
+ return $this->query('EventLogger');
+ }
+
+ /**
+ * Get the active query logger
+ *
+ * The returned logger only logs data when debug mode is enabled
+ *
+ * @return \OCP\Diagnostics\IQueryLogger
+ */
+ function getQueryLogger() {
+ return $this->query('QueryLogger');
+ }
+
+ /**
+ * Get the manager for temporary files and folders
+ *
+ * @return \OCP\ITempManager
+ */
+ function getTempManager() {
+ return $this->query('TempManager');
+ }
}
diff --git a/lib/private/setup.php b/lib/private/setup.php
index 75dc1987ee6..b82e0be72e8 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -1,9 +1,27 @@
<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+use OCP\IConfig;
class DatabaseSetupException extends \OC\HintException {
}
class OC_Setup {
+ /** @var IConfig */
+ protected $config;
+
+ /**
+ * @param IConfig $config
+ */
+ function __construct(IConfig $config) {
+ $this->config = $config;
+ }
+
static $dbSetupClasses = array(
'mysql' => '\OC\Setup\MySQL',
'pgsql' => '\OC\Setup\PostgreSQL',
@@ -13,15 +31,99 @@ class OC_Setup {
'sqlite3' => '\OC\Setup\Sqlite',
);
+ /**
+ * @return OC_L10N
+ */
public static function getTrans(){
return \OC::$server->getL10N('lib');
}
+ /**
+ * Wrapper around the "class_exists" PHP function to be able to mock it
+ * @param string $name
+ * @return bool
+ */
+ public function class_exists($name) {
+ return class_exists($name);
+ }
+
+ /**
+ * Wrapper around the "is_callable" PHP function to be able to mock it
+ * @param string $name
+ * @return bool
+ */
+ public function is_callable($name) {
+ return is_callable($name);
+ }
+
+ /**
+ * Get the available and supported databases of this instance
+ *
+ * @throws Exception
+ * @return array
+ */
+ public function getSupportedDatabases() {
+ $availableDatabases = array(
+ 'sqlite' => array(
+ 'type' => 'class',
+ 'call' => 'SQLite3',
+ 'name' => 'SQLite'
+ ),
+ 'mysql' => array(
+ 'type' => 'function',
+ 'call' => 'mysql_connect',
+ 'name' => 'MySQL/MariaDB'
+ ),
+ 'pgsql' => array(
+ 'type' => 'function',
+ 'call' => 'oci_connect',
+ 'name' => 'PostgreSQL'
+ ),
+ 'oci' => array(
+ 'type' => 'function',
+ 'call' => 'oci_connect',
+ 'name' => 'Oracle'
+ ),
+ 'mssql' => array(
+ 'type' => 'function',
+ 'call' => 'sqlsrv_connect',
+ 'name' => 'MS SQL'
+ )
+ );
+ $configuredDatabases = $this->config->getSystemValue('supportedDatabases',
+ array('sqlite', 'mysql', 'pgsql', 'oci', 'mssql'));
+ if(!is_array($configuredDatabases)) {
+ throw new Exception('Supported databases are not properly configured.');
+ }
+
+ $supportedDatabases = array();
+
+ foreach($configuredDatabases as $database) {
+ if(array_key_exists($database, $availableDatabases)) {
+ $working = false;
+ if($availableDatabases[$database]['type'] === 'class') {
+ $working = $this->class_exists($availableDatabases[$database]['call']);
+ } elseif ($availableDatabases[$database]['type'] === 'function') {
+ $working = $this->is_callable($availableDatabases[$database]['call']);
+ }
+ if($working) {
+ $supportedDatabases[$database] = $availableDatabases[$database]['name'];
+ }
+ }
+ }
+
+ return $supportedDatabases;
+ }
+
+ /**
+ * @param $options
+ * @return array
+ */
public static function install($options) {
$l = self::getTrans();
$error = array();
- $dbtype = $options['dbtype'];
+ $dbType = $options['dbtype'];
if(empty($options['adminlogin'])) {
$error[] = $l->t('Set an admin username.');
@@ -33,25 +135,25 @@ class OC_Setup {
$options['directory'] = OC::$SERVERROOT."/data";
}
- if (!isset(self::$dbSetupClasses[$dbtype])) {
- $dbtype = 'sqlite';
+ if (!isset(self::$dbSetupClasses[$dbType])) {
+ $dbType = 'sqlite';
}
$username = htmlspecialchars_decode($options['adminlogin']);
$password = htmlspecialchars_decode($options['adminpass']);
- $datadir = htmlspecialchars_decode($options['directory']);
+ $dataDir = htmlspecialchars_decode($options['directory']);
- $class = self::$dbSetupClasses[$dbtype];
+ $class = self::$dbSetupClasses[$dbType];
/** @var \OC\Setup\AbstractDatabase $dbSetup */
$dbSetup = new $class(self::getTrans(), 'db_structure.xml');
$error = array_merge($error, $dbSetup->validate($options));
// validate the data directory
if (
- (!is_dir($datadir) and !mkdir($datadir)) or
- !is_writable($datadir)
+ (!is_dir($dataDir) and !mkdir($dataDir)) or
+ !is_writable($dataDir)
) {
- $error[] = $l->t("Can't create or write into the data directory %s", array($datadir));
+ $error[] = $l->t("Can't create or write into the data directory %s", array($dataDir));
}
if(count($error) != 0) {
@@ -59,7 +161,7 @@ class OC_Setup {
}
//no errors, good
- if( isset($options['trusted_domains'])
+ if(isset($options['trusted_domains'])
&& is_array($options['trusted_domains'])) {
$trustedDomains = $options['trusted_domains'];
} else {
@@ -67,12 +169,12 @@ class OC_Setup {
}
if (OC_Util::runningOnWindows()) {
- $datadir = rtrim(realpath($datadir), '\\');
+ $dataDir = rtrim(realpath($dataDir), '\\');
}
- //use sqlite3 when available, otherise sqlite2 will be used.
- if($dbtype=='sqlite' and class_exists('SQLite3')) {
- $dbtype='sqlite3';
+ //use sqlite3 when available, otherwise sqlite2 will be used.
+ if($dbType=='sqlite' and class_exists('SQLite3')) {
+ $dbType='sqlite3';
}
//generate a random salt that is used to salt the local user passwords
@@ -85,9 +187,9 @@ class OC_Setup {
//write the config file
\OC::$server->getConfig()->setSystemValue('trusted_domains', $trustedDomains);
- \OC::$server->getConfig()->setSystemValue('datadirectory', $datadir);
+ \OC::$server->getConfig()->setSystemValue('datadirectory', $dataDir);
\OC::$server->getConfig()->setSystemValue('overwrite.cli.url', \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . OC::$WEBROOT);
- \OC::$server->getConfig()->setSystemValue('dbtype', $dbtype);
+ \OC::$server->getConfig()->setSystemValue('dbtype', $dbType);
\OC::$server->getConfig()->setSystemValue('version', implode('.', OC_Util::getVersion()));
try {
@@ -110,8 +212,7 @@ class OC_Setup {
//create the user and group
try {
OC_User::createUser($username, $password);
- }
- catch(Exception $exception) {
+ } catch(Exception $exception) {
$error[] = $exception->getMessage();
}
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 5314e09b8de..b7b05dab8ef 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -672,7 +672,6 @@ class Share extends \OC\Share\Constants {
$message_t = $l->t('Sharing %s failed, because sharing with links is not allowed', array($itemSourceName));
\OC_Log::write('OCP\Share', sprintf($message, $itemSourceName), \OC_Log::ERROR);
throw new \Exception($message_t);
- return false;
} else {
// Future share types need to include their own conditions
$message = 'Share type %s is not valid for %s';
@@ -1181,7 +1180,7 @@ class Share extends \OC\Share\Constants {
}
}
// TODO Add option for collections to be collection of themselves, only 'folder' does it now...
- if (!self::getBackend($itemType) instanceof \OCP\Share_Backend_Collection || $itemType != 'folder') {
+ if (isset(self::$backendTypes[$itemType]) && (!self::getBackend($itemType) instanceof \OCP\Share_Backend_Collection || $itemType != 'folder')) {
unset($collectionTypes[0]);
}
// Return array if collections were found or the item type is a
@@ -1193,6 +1192,57 @@ class Share extends \OC\Share\Constants {
}
/**
+ * Get the owners of items shared with a user.
+ *
+ * @param string $user The user the items are shared with.
+ * @param string $type The type of the items shared with the user.
+ * @param boolean $includeCollections Include collection item types (optional)
+ * @param boolean $includeOwner include owner in the list of users the item is shared with (optional)
+ * @return array
+ */
+ public static function getSharedItemsOwners($user, $type, $includeCollections = false, $includeOwner = false) {
+ // First, we find out if $type is part of a collection (and if that collection is part of
+ // another one and so on).
+ $collectionTypes = array();
+ if (!$includeCollections || !$collectionTypes = self::getCollectionItemTypes($type)) {
+ $collectionTypes[] = $type;
+ }
+
+ // Of these collection types, along with our original $type, we make a
+ // list of the ones for which a sharing backend has been registered.
+ // FIXME: Ideally, we wouldn't need to nest getItemsSharedWith in this loop but just call it
+ // with its $includeCollections parameter set to true. Unfortunately, this fails currently.
+ $allMaybeSharedItems = array();
+ foreach ($collectionTypes as $collectionType) {
+ if (isset(self::$backends[$collectionType])) {
+ $allMaybeSharedItems[$collectionType] = self::getItemsSharedWithUser(
+ $collectionType,
+ $user,
+ self::FORMAT_NONE
+ );
+ }
+ }
+
+ $owners = array();
+ if ($includeOwner) {
+ $owners[] = $user;
+ }
+
+ // We take a look at all shared items of the given $type (or of the collections it is part of)
+ // and find out their owners. Then, we gather the tags for the original $type from all owners,
+ // and return them as elements of a list that look like "Tag (owner)".
+ foreach ($allMaybeSharedItems as $collectionType => $maybeSharedItems) {
+ foreach ($maybeSharedItems as $sharedItem) {
+ if (isset($sharedItem['id'])) { //workaround for https://github.com/owncloud/core/issues/2814
+ $owners[] = $sharedItem['uid_owner'];
+ }
+ }
+ }
+
+ return $owners;
+ }
+
+ /**
* Get shared items from the database
* @param string $itemType
* @param string $item Item source or target (optional)
@@ -1730,12 +1780,12 @@ class Share extends \OC\Share\Constants {
} elseif(!$sourceExists && !$isGroupShare) {
- $itemTarget = Helper::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $user,
+ $itemTarget = Helper::generateTarget($itemType, $itemSource, $shareType, $user,
$uidOwner, $suggestedItemTarget, $parent);
if (isset($fileSource)) {
if ($parentFolder) {
if ($parentFolder === true) {
- $fileTarget = Helper::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $user,
+ $fileTarget = Helper::generateTarget('file', $filePath, $shareType, $user,
$uidOwner, $suggestedFileTarget, $parent);
if ($fileTarget != $groupFileTarget) {
$parentFolders[$user]['folder'] = $fileTarget;
@@ -1745,7 +1795,7 @@ class Share extends \OC\Share\Constants {
$parent = $parentFolder[$user]['id'];
}
} else {
- $fileTarget = Helper::generateTarget('file', $filePath, self::SHARE_TYPE_USER,
+ $fileTarget = Helper::generateTarget('file', $filePath, $shareType,
$user, $uidOwner, $suggestedFileTarget, $parent);
}
} else {
diff --git a/lib/private/tagging/tag.php b/lib/private/tagging/tag.php
new file mode 100644
index 00000000000..3ea9fbac20b
--- /dev/null
+++ b/lib/private/tagging/tag.php
@@ -0,0 +1,89 @@
+<?php
+/**
+* ownCloud - Tag class
+*
+* @author Bernhard Reiter
+* @copyright 2014 Bernhard Reiter <ockham@raz.or.at>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace OC\Tagging;
+
+use \OCP\AppFramework\Db\Entity;
+
+/**
+ * Class to represent a tag.
+ *
+ * @method string getOwner()
+ * @method void setOwner(string $owner)
+ * @method string getType()
+ * @method void setType(string $type)
+ * @method string getName()
+ * @method void setName(string $name)
+ */
+class Tag extends Entity {
+
+ protected $owner;
+ protected $type;
+ protected $name;
+
+ /**
+ * Constructor.
+ *
+ * @param string $owner The tag's owner
+ * @param string $type The type of item this tag is used for
+ * @param string $name The tag's name
+ */
+ public function __construct($owner = null, $type = null, $name = null) {
+ $this->setOwner($owner);
+ $this->setType($type);
+ $this->setName($name);
+ }
+
+ /**
+ * Transform a database columnname to a property
+ *
+ * @param string $columnName the name of the column
+ * @return string the property name
+ * @todo migrate existing database columns to the correct names
+ * to be able to drop this direct mapping
+ */
+ public function columnToProperty($columnName){
+ if ($columnName === 'category') {
+ return 'name';
+ } elseif ($columnName === 'uid') {
+ return 'owner';
+ } else {
+ return parent::columnToProperty($columnName);
+ }
+ }
+
+ /**
+ * Transform a property to a database column name
+ *
+ * @param string $property the name of the property
+ * @return string the column name
+ */
+ public function propertyToColumn($property){
+ if ($property === 'name') {
+ return 'category';
+ } elseif ($property === 'owner') {
+ return 'uid';
+ } else {
+ return parent::propertyToColumn($property);
+ }
+ }
+}
diff --git a/lib/private/tagging/tagmapper.php b/lib/private/tagging/tagmapper.php
new file mode 100644
index 00000000000..6c9bec7aa52
--- /dev/null
+++ b/lib/private/tagging/tagmapper.php
@@ -0,0 +1,77 @@
+<?php
+/**
+* ownCloud - TagMapper class
+*
+* @author Bernhard Reiter
+* @copyright 2014 Bernhard Reiter <ockham@raz.or.at>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace OC\Tagging;
+
+use \OCP\AppFramework\Db\Mapper,
+ \OCP\AppFramework\Db\DoesNotExistException,
+ \OCP\IDb;
+
+/**
+ * Mapper for Tag entity
+ */
+class TagMapper extends Mapper {
+
+ /**
+ * Constructor.
+ *
+ * @param IDb $db Instance of the Db abstraction layer.
+ */
+ public function __construct(IDb $db) {
+ parent::__construct($db, 'vcategory', 'OC\Tagging\Tag');
+ }
+
+ /**
+ * Load tags from the database.
+ *
+ * @param array|string $owners The user(s) whose tags we are going to load.
+ * @param string $type The type of item for which we are loading tags.
+ * @return array An array of Tag objects.
+ */
+ public function loadTags($owners, $type) {
+ if(!is_array($owners)) {
+ $owners = array($owners);
+ }
+
+ $sql = 'SELECT `id`, `uid`, `type`, `category` FROM `' . $this->getTableName() . '` '
+ . 'WHERE `uid` IN (' . str_repeat('?,', count($owners)-1) . '?) AND `type` = ? ORDER BY `category`';
+ return $this->findEntities($sql, array_merge($owners, array($type)));
+ }
+
+ /**
+ * Check if a given Tag object already exists in the database.
+ *
+ * @param Tag $tag The tag to look for in the database.
+ * @return bool
+ */
+ public function tagExists($tag) {
+ $sql = 'SELECT `id`, `uid`, `type`, `category` FROM `' . $this->getTableName() . '` '
+ . 'WHERE `uid` = ? AND `type` = ? AND `category` = ?';
+ try {
+ $this->findEntity($sql, array($tag->getOwner(), $tag->getType(), $tag->getName()));
+ } catch (DoesNotExistException $e) {
+ return false;
+ }
+ return true;
+ }
+}
+
diff --git a/lib/private/tagmanager.php b/lib/private/tagmanager.php
index 9a371a11253..d5bff04acff 100644
--- a/lib/private/tagmanager.php
+++ b/lib/private/tagmanager.php
@@ -33,6 +33,8 @@
namespace OC;
+use OC\Tagging\TagMapper;
+
class TagManager implements \OCP\ITagManager {
/**
@@ -40,15 +42,24 @@ class TagManager implements \OCP\ITagManager {
*
* @var string
*/
- private $user = null;
+ private $user;
+
+ /**
+ * TagMapper
+ *
+ * @var TagMapper
+ */
+ private $mapper;
/**
* Constructor.
*
- * @param string $user The user whos data the object will operate on.
+ * @param TagMapper $mapper Instance of the TagMapper abstraction layer.
+ * @param string $user The user whose data the object will operate on.
*/
- public function __construct($user) {
+ public function __construct(TagMapper $mapper, $user) {
+ $this->mapper = $mapper;
$this->user = $user;
}
@@ -59,10 +70,11 @@ class TagManager implements \OCP\ITagManager {
* @see \OCP\ITags
* @param string $type The type identifier e.g. 'contact' or 'event'.
* @param array $defaultTags An array of default tags to be used if none are stored.
+ * @param boolean $includeShared Whether to include tags for items shared with this user by others.
* @return \OCP\ITags
*/
- public function load($type, $defaultTags=array()) {
- return new Tags($this->user, $type, $defaultTags);
+ public function load($type, $defaultTags=array(), $includeShared=false) {
+ return new Tags($this->mapper, $this->user, $type, $defaultTags, $includeShared);
}
-} \ No newline at end of file
+}
diff --git a/lib/private/tags.php b/lib/private/tags.php
index 0e58789ecd5..bab3d495282 100644
--- a/lib/private/tags.php
+++ b/lib/private/tags.php
@@ -34,6 +34,9 @@
namespace OC;
+use \OC\Tagging\Tag,
+ \OC\Tagging\TagMapper;
+
class Tags implements \OCP\ITags {
/**
@@ -55,14 +58,44 @@ class Tags implements \OCP\ITags {
*
* @var string
*/
- private $type = null;
+ private $type;
/**
* User
*
* @var string
*/
- private $user = null;
+ private $user;
+
+ /**
+ * Are we including tags for shared items?
+ *
+ * @var bool
+ */
+ private $includeShared = false;
+
+ /**
+ * The current user, plus any owners of the items shared with the current
+ * user, if $this->includeShared === true.
+ *
+ * @var array
+ */
+ private $owners = array();
+
+ /**
+ * The Mapper we're using to communicate our Tag objects to the database.
+ *
+ * @var TagMapper
+ */
+ private $mapper;
+
+ /**
+ * The sharing backend for objects of $this->type. Required if
+ * $this->includeShared === true to determine ownership of items.
+ *
+ * @var \OCP\Share_Backend
+ */
+ private $backend;
const TAG_TABLE = '*PREFIX*vcategory';
const RELATION_TABLE = '*PREFIX*vcategory_to_object';
@@ -72,47 +105,29 @@ class Tags implements \OCP\ITags {
/**
* Constructor.
*
- * @param string $user The user whos data the object will operate on.
- * @param string $type
+ * @param TagMapper $mapper Instance of the TagMapper abstraction layer.
+ * @param string $user The user whose data the object will operate on.
+ * @param string $type The type of items for which tags will be loaded.
+ * @param array $defaultTags Tags that should be created at construction.
+ * @param boolean $includeShared Whether to include tags for items shared with this user by others.
*/
- public function __construct($user, $type, $defaultTags = array()) {
+ public function __construct(TagMapper $mapper, $user, $type, $defaultTags = array(), $includeShared = false) {
+ $this->mapper = $mapper;
$this->user = $user;
$this->type = $type;
- $this->loadTags($defaultTags);
- }
-
- /**
- * Load tags from db.
- *
- */
- protected function loadTags($defaultTags=array()) {
- $this->tags = array();
- $result = null;
- $sql = 'SELECT `id`, `category` FROM `' . self::TAG_TABLE . '` '
- . 'WHERE `uid` = ? AND `type` = ? ORDER BY `category`';
- try {
- $stmt = \OCP\DB::prepare($sql);
- $result = $stmt->execute(array($this->user, $this->type));
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('core', __METHOD__. ', DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
- }
- } catch(\Exception $e) {
- \OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
- \OCP\Util::ERROR);
- }
-
- if(!is_null($result)) {
- while( $row = $result->fetchRow()) {
- $this->tags[$row['id']] = $row['category'];
- }
+ $this->includeShared = $includeShared;
+ $this->owners = array($this->user);
+ if ($this->includeShared) {
+ $this->owners = array_merge($this->owners, \OC\Share\Share::getSharedItemsOwners($this->user, $this->type, true));
+ $this->backend = \OC\Share\Share::getBackend($this->type);
}
+ $this->tags = $this->mapper->loadTags($this->owners, $this->type);
if(count($defaultTags) > 0 && count($this->tags) === 0) {
$this->addMultiple($defaultTags, true);
}
\OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
\OCP\Util::DEBUG);
-
}
/**
@@ -125,12 +140,27 @@ class Tags implements \OCP\ITags {
}
/**
+ * Returns an array mapping a given tag's properties to its values:
+ * ['id' => 0, 'name' = 'Tag', 'owner' = 'User', 'type' => 'tagtype']
+ *
+ * @param string $id The ID of the tag that is going to be mapped
+ * @return array|false
+ */
+ public function getTag($id) {
+ $key = $this->getTagById($id);
+ if ($key !== false) {
+ return $this->tagMap($this->tags[$key]);
+ }
+ return false;
+ }
+
+ /**
* Get the tags for a specific user.
*
- * This returns an array with id/name maps:
+ * This returns an array with maps containing each tag's properties:
* [
- * ['id' => 0, 'name' = 'First tag'],
- * ['id' => 1, 'name' = 'Second tag'],
+ * ['id' => 0, 'name' = 'First tag', 'owner' = 'User', 'type' => 'tagtype'],
+ * ['id' => 1, 'name' = 'Shared tag', 'owner' = 'Other user', 'type' => 'tagtype'],
* ]
*
* @return array
@@ -140,16 +170,14 @@ class Tags implements \OCP\ITags {
return array();
}
- $tags = array_values($this->tags);
- uasort($tags, 'strnatcasecmp');
+ usort($this->tags, function($a, $b) {
+ return strnatcasecmp($a->getName(), $b->getName());
+ });
$tagMap = array();
- foreach($tags as $tag) {
- if($tag !== self::TAG_FAVORITE) {
- $tagMap[] = array(
- 'id' => $this->array_searchi($tag, $this->tags),
- 'name' => $tag
- );
+ foreach($this->tags as $tag) {
+ if($tag->getName() !== self::TAG_FAVORITE) {
+ $tagMap[] = $this->tagMap($tag);
}
}
return $tagMap;
@@ -157,6 +185,21 @@ class Tags implements \OCP\ITags {
}
/**
+ * Return only the tags owned by the given user, omitting any tags shared
+ * by other users.
+ *
+ * @param string $user The user whose tags are to be checked.
+ * @return array An array of Tag objects.
+ */
+ public function getTagsForUser($user) {
+ return array_filter($this->tags,
+ function($tag) use($user) {
+ return $tag->getOwner() === $user;
+ }
+ );
+ }
+
+ /**
* Get the a list if items tagged with $tag.
*
* Throws an exception if the tag could not be found.
@@ -174,7 +217,7 @@ class Tags implements \OCP\ITags {
\OCP\Util::writeLog('core', __METHOD__.', Cannot use empty tag names', \OCP\Util::DEBUG);
return false;
}
- $tagId = $this->array_searchi($tag, $this->tags);
+ $tagId = $this->getTagId($tag);
}
if($tagId === false) {
@@ -203,7 +246,22 @@ class Tags implements \OCP\ITags {
if(!is_null($result)) {
while( $row = $result->fetchRow()) {
- $ids[] = (int)$row['objid'];
+ $id = (int)$row['objid'];
+
+ if ($this->includeShared) {
+ // We have to check if we are really allowed to access the
+ // items that are tagged with $tag. To that end, we ask the
+ // corresponding sharing backend if the item identified by $id
+ // is owned by any of $this->owners.
+ foreach ($this->owners as $owner) {
+ if ($this->backend->isValidSource($id, $owner)) {
+ $ids[] = $id;
+ break;
+ }
+ }
+ } else {
+ $ids[] = $id;
+ }
}
}
@@ -211,13 +269,26 @@ class Tags implements \OCP\ITags {
}
/**
- * Checks whether a tag is already saved.
+ * Checks whether a tag is saved for the given user,
+ * disregarding the ones shared with him or her.
+ *
+ * @param string $name The tag name to check for.
+ * @param string $user The user whose tags are to be checked.
+ * @return bool
+ */
+ public function userHasTag($name, $user) {
+ $key = $this->array_searchi($name, $this->getTagsForUser($user));
+ return ($key !== false) ? $this->tags[$key]->getId() : false;
+ }
+
+ /**
+ * Checks whether a tag is saved for or shared with the current user.
*
- * @param string $name The name to check for.
+ * @param string $name The tag name to check for.
* @return bool
*/
public function hasTag($name) {
- return $this->in_arrayi($name, $this->tags);
+ return $this->getTagId($name) !== false;
}
/**
@@ -233,41 +304,27 @@ class Tags implements \OCP\ITags {
\OCP\Util::writeLog('core', __METHOD__.', Cannot add an empty tag', \OCP\Util::DEBUG);
return false;
}
- if($this->hasTag($name)) {
+ if($this->userHasTag($name, $this->user)) {
\OCP\Util::writeLog('core', __METHOD__.', name: ' . $name. ' exists already', \OCP\Util::DEBUG);
return false;
}
try {
- $result = \OCP\DB::insertIfNotExist(
- self::TAG_TABLE,
- array(
- 'uid' => $this->user,
- 'type' => $this->type,
- 'category' => $name,
- )
- );
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
- return false;
- } elseif((int)$result === 0) {
- \OCP\Util::writeLog('core', __METHOD__.', Tag already exists: ' . $name, \OCP\Util::DEBUG);
- return false;
- }
+ $tag = new Tag($this->user, $this->type, $name);
+ $tag = $this->mapper->insert($tag);
+ $this->tags[] = $tag;
} catch(\Exception $e) {
\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
\OCP\Util::ERROR);
return false;
}
- $id = \OCP\DB::insertid(self::TAG_TABLE);
- \OCP\Util::writeLog('core', __METHOD__.', id: ' . $id, \OCP\Util::DEBUG);
- $this->tags[$id] = $name;
- return $id;
+ \OCP\Util::writeLog('core', __METHOD__.', id: ' . $tag->getId(), \OCP\Util::DEBUG);
+ return $tag->getId();
}
/**
* Rename tag.
*
- * @param string $from The name of the existing tag
+ * @param string|integer $from The name or ID of the existing tag
* @param string $to The new name of the tag.
* @return bool
*/
@@ -280,27 +337,30 @@ class Tags implements \OCP\ITags {
return false;
}
- $id = $this->array_searchi($from, $this->tags);
- if($id === false) {
+ if (is_numeric($from)) {
+ $key = $this->getTagById($from);
+ } else {
+ $key = $this->getTagByName($from);
+ }
+ if($key === false) {
\OCP\Util::writeLog('core', __METHOD__.', tag: ' . $from. ' does not exist', \OCP\Util::DEBUG);
return false;
}
+ $tag = $this->tags[$key];
+
+ if($this->userHasTag($to, $tag->getOwner())) {
+ \OCP\Util::writeLog('core', __METHOD__.', A tag named ' . $to. ' already exists for user ' . $tag->getOwner() . '.', \OCP\Util::DEBUG);
+ return false;
+ }
- $sql = 'UPDATE `' . self::TAG_TABLE . '` SET `category` = ? '
- . 'WHERE `uid` = ? AND `type` = ? AND `id` = ?';
try {
- $stmt = \OCP\DB::prepare($sql);
- $result = $stmt->execute(array($to, $this->user, $this->type, $id));
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
- return false;
- }
+ $tag->setName($to);
+ $this->tags[$key] = $this->mapper->update($tag);
} catch(\Exception $e) {
\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
\OCP\Util::ERROR);
return false;
}
- $this->tags[$id] = $to;
return true;
}
@@ -308,7 +368,7 @@ class Tags implements \OCP\ITags {
* Add a list of new tags.
*
* @param string[] $names A string with a name or an array of strings containing
- * the name(s) of the to add.
+ * the name(s) of the tag(s) to add.
* @param bool $sync When true, save the tags
* @param int|null $id int Optional object id to add to this|these tag(s)
* @return bool Returns false on error.
@@ -322,9 +382,8 @@ class Tags implements \OCP\ITags {
$newones = array();
foreach($names as $name) {
- if(($this->in_arrayi(
- $name, $this->tags) == false) && $name !== '') {
- $newones[] = $name;
+ if(!$this->hasTag($name) && $name !== '') {
+ $newones[] = new Tag($this->user, $this->type, $name);
}
if(!is_null($id) ) {
// Insert $objectid, $categoryid pairs if not exist.
@@ -346,26 +405,26 @@ class Tags implements \OCP\ITags {
if(is_array($this->tags)) {
foreach($this->tags as $tag) {
try {
- \OCP\DB::insertIfNotExist(self::TAG_TABLE,
- array(
- 'uid' => $this->user,
- 'type' => $this->type,
- 'category' => $tag,
- ));
+ if (!$this->mapper->tagExists($tag)) {
+ $this->mapper->insert($tag);
+ }
} catch(\Exception $e) {
\OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
\OCP\Util::ERROR);
}
}
+
// reload tags to get the proper ids.
- $this->loadTags();
+ $this->tags = $this->mapper->loadTags($this->owners, $this->type);
+ \OCP\Util::writeLog('core', __METHOD__.', tags: ' . print_r($this->tags, true),
+ \OCP\Util::DEBUG);
// Loop through temporarily cached objectid/tagname pairs
// and save relations.
$tags = $this->tags;
// For some reason this is needed or array_search(i) will return 0..?
ksort($tags);
foreach(self::$relations as $relation) {
- $tagId = $this->array_searchi($relation['tag'], $tags);
+ $tagId = $this->getTagId($relation['tag']);
\OCP\Util::writeLog('core', __METHOD__ . 'catid, ' . $relation['tag'] . ' ' . $tagId, \OCP\Util::DEBUG);
if($tagId) {
try {
@@ -493,7 +552,7 @@ class Tags implements \OCP\ITags {
* @return boolean
*/
public function addToFavorites($objid) {
- if(!$this->hasTag(self::TAG_FAVORITE)) {
+ if(!$this->userHasTag(self::TAG_FAVORITE, $this->user)) {
$this->add(self::TAG_FAVORITE);
}
return $this->tagAs($objid, self::TAG_FAVORITE);
@@ -526,7 +585,7 @@ class Tags implements \OCP\ITags {
if(!$this->hasTag($tag)) {
$this->add($tag);
}
- $tagId = $this->array_searchi($tag, $this->tags);
+ $tagId = $this->getTagId($tag);
} else {
$tagId = $tag;
}
@@ -559,7 +618,7 @@ class Tags implements \OCP\ITags {
\OCP\Util::writeLog('core', __METHOD__.', Tag name is empty', \OCP\Util::DEBUG);
return false;
}
- $tagId = $this->array_searchi($tag, $this->tags);
+ $tagId = $this->getTagId($tag);
} else {
$tagId = $tag;
}
@@ -578,9 +637,9 @@ class Tags implements \OCP\ITags {
}
/**
- * Delete tags from the
+ * Delete tags from the database.
*
- * @param string[] $names An array of tags to delete
+ * @param string[]|integer[] $names An array of tags (names or IDs) to delete
* @return bool Returns false on error
*/
public function delete($names) {
@@ -596,21 +655,19 @@ class Tags implements \OCP\ITags {
foreach($names as $name) {
$id = null;
- if($this->hasTag($name)) {
- $id = $this->array_searchi($name, $this->tags);
- unset($this->tags[$id]);
+ if (is_numeric($name)) {
+ $key = $this->getTagById($name);
+ } else {
+ $key = $this->getTagByName($name);
}
- try {
- $stmt = \OCP\DB::prepare('DELETE FROM `' . self::TAG_TABLE . '` WHERE '
- . '`uid` = ? AND `type` = ? AND `category` = ?');
- $result = $stmt->execute(array($this->user, $this->type, $name));
- if (\OCP\DB::isError($result)) {
- \OCP\Util::writeLog('core', __METHOD__. 'DB error: ' . \OCP\DB::getErrorMessage($result), \OCP\Util::ERROR);
- }
- } catch(\Exception $e) {
- \OCP\Util::writeLog('core', __METHOD__ . ', exception: '
- . $e->getMessage(), \OCP\Util::ERROR);
- return false;
+ if ($key !== false) {
+ $tag = $this->tags[$key];
+ $id = $tag->getId();
+ unset($this->tags[$key]);
+ $this->mapper->delete($tag);
+ } else {
+ \OCP\Util::writeLog('core', __METHOD__ . 'Cannot delete tag ' . $name
+ . ': not found.', \OCP\Util::ERROR);
}
if(!is_null($id) && $id !== false) {
try {
@@ -634,19 +691,67 @@ class Tags implements \OCP\ITags {
return true;
}
- // case-insensitive in_array
- private function in_arrayi($needle, $haystack) {
+ // case-insensitive array_search
+ protected function array_searchi($needle, $haystack, $mem='getName') {
if(!is_array($haystack)) {
return false;
}
- return in_array(strtolower($needle), array_map('strtolower', $haystack));
+ return array_search(strtolower($needle), array_map(
+ function($tag) use($mem) {
+ return strtolower(call_user_func(array($tag, $mem)));
+ }, $haystack)
+ );
}
- // case-insensitive array_search
- private function array_searchi($needle, $haystack) {
- if(!is_array($haystack)) {
- return false;
+ /**
+ * Get a tag's ID.
+ *
+ * @param string $name The tag name to look for.
+ * @return string|bool The tag's id or false if no matching tag is found.
+ */
+ private function getTagId($name) {
+ $key = $this->array_searchi($name, $this->tags);
+ if ($key !== false) {
+ return $this->tags[$key]->getId();
}
- return array_search(strtolower($needle), array_map('strtolower', $haystack));
+ return false;
+ }
+
+ /**
+ * Get a tag by its name.
+ *
+ * @param string $name The tag name.
+ * @return integer|bool The tag object's offset within the $this->tags
+ * array or false if it doesn't exist.
+ */
+ private function getTagByName($name) {
+ return $this->array_searchi($name, $this->tags, 'getName');
+ }
+
+ /**
+ * Get a tag by its ID.
+ *
+ * @param string $id The tag ID to look for.
+ * @return integer|bool The tag object's offset within the $this->tags
+ * array or false if it doesn't exist.
+ */
+ private function getTagById($id) {
+ return $this->array_searchi($id, $this->tags, 'getId');
+ }
+
+ /**
+ * Returns an array mapping a given tag's properties to its values:
+ * ['id' => 0, 'name' = 'Tag', 'owner' = 'User', 'type' => 'tagtype']
+ *
+ * @param Tag $tag The tag that is going to be mapped
+ * @return array
+ */
+ private function tagMap(Tag $tag) {
+ return array(
+ 'id' => $tag->getId(),
+ 'name' => $tag->getName(),
+ 'owner' => $tag->getOwner(),
+ 'type' => $tag->getType()
+ );
}
}
diff --git a/lib/private/template.php b/lib/private/template.php
index fce26117ede..fe0cde53ff1 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -198,8 +198,8 @@ class OC_Template extends \OC\Template\Base {
* Includes another template. use <?php echo $this->inc('template'); ?> to
* do this.
*/
- public function inc( $file, $additionalparams = null ) {
- return $this->load($this->path.$file.'.php', $additionalparams);
+ public function inc( $file, $additionalParams = null ) {
+ return $this->load($this->path.$file.'.php', $additionalParams);
}
/**
@@ -277,4 +277,34 @@ class OC_Template extends \OC\Template\Base {
$content->printPage();
die();
}
+
+ /**
+ * @return bool
+ */
+ public static function isAssetPipelineEnabled() {
+ // asset management enabled?
+ $useAssetPipeline = \OC::$server->getConfig()->getSystemValue('asset-pipeline.enabled', false);
+ if (!$useAssetPipeline) {
+ return false;
+ }
+
+ // assets folder exists?
+ $assetDir = \OC::$SERVERROOT . '/assets';
+ if (!is_dir($assetDir)) {
+ if (!mkdir($assetDir)) {
+ \OCP\Util::writeLog('assets',
+ "Folder <$assetDir> does not exist and/or could not be generated.", \OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ // assets folder can be accessed?
+ if (!touch($assetDir."/.oc")) {
+ \OCP\Util::writeLog('assets',
+ "Folder <$assetDir> could not be accessed.", \OCP\Util::ERROR);
+ return false;
+ }
+ return $useAssetPipeline;
+ }
+
}
diff --git a/lib/private/template/templatefilelocator.php b/lib/private/template/templatefilelocator.php
index 4676fceb37d..8e9f3bd8100 100644
--- a/lib/private/template/templatefilelocator.php
+++ b/lib/private/template/templatefilelocator.php
@@ -24,6 +24,8 @@ class TemplateFileLocator {
/**
* @param string $template
+ * @return string
+ * @throws \Exception
*/
public function find( $template ) {
if ($template === '') {
diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php
index e9172fd2da5..a93449f202f 100644
--- a/lib/private/templatelayout.php
+++ b/lib/private/templatelayout.php
@@ -2,8 +2,10 @@
use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\AssetWriter;
-use Assetic\Filter\CssRewriteFilter;
use Assetic\Filter\CssImportFilter;
+use Assetic\Filter\CssMinFilter;
+use Assetic\Filter\CssRewriteFilter;
+use Assetic\Filter\JSMinFilter;
/**
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
@@ -14,14 +16,24 @@ use Assetic\Filter\CssImportFilter;
class OC_TemplateLayout extends OC_Template {
+ private static $versionHash = '';
+
/**
- * @param string $renderas
- * @param string $appid application id
+ * @var \OCP\IConfig
*/
- public function __construct( $renderas, $appid = '' ) {
- // Decide which page we show
+ private $config;
+
+ /**
+ * @param string $renderAs
+ * @param string $appId application id
+ */
+ public function __construct( $renderAs, $appId = '' ) {
+
+ // yes - should be injected ....
+ $this->config = \OC::$server->getConfig();
- if( $renderas == 'user' ) {
+ // Decide which page we show
+ if( $renderAs == 'user' ) {
parent::__construct( 'core', 'layout.user' );
if(in_array(OC_APP::getCurrentApp(), array('settings','admin', 'help'))!==false) {
$this->assign('bodyid', 'body-settings');
@@ -30,9 +42,12 @@ class OC_TemplateLayout extends OC_Template {
}
// Update notification
- if(OC_Config::getValue('updatechecker', true) === true) {
- $data=OC_Updater::check();
- if(isset($data['version']) && $data['version'] != '' and $data['version'] !== Array() && OC_User::isAdminUser(OC_User::getUser())) {
+ if($this->config->getSystemValue('updatechecker', true) === true &&
+ OC_User::isAdminUser(OC_User::getUser())) {
+ $updater = new \OC\Updater();
+ $data = $updater->check();
+
+ if(isset($data['version']) && $data['version'] != '' and $data['version'] !== Array()) {
$this->assign('updateAvailable', true);
$this->assign('updateVersion', $data['versionstring']);
$this->assign('updateLink', $data['web']);
@@ -45,7 +60,7 @@ class OC_TemplateLayout extends OC_Template {
// Add navigation entry
$this->assign( 'application', '', false );
- $this->assign( 'appid', $appid );
+ $this->assign( 'appid', $appId );
$navigation = OC_App::getNavigation();
$this->assign( 'navigation', $navigation);
$this->assign( 'settingsnavigation', OC_App::getSettingsNavigation());
@@ -55,51 +70,55 @@ class OC_TemplateLayout extends OC_Template {
break;
}
}
- $user_displayname = OC_User::getDisplayName();
- $this->assign( 'user_displayname', $user_displayname );
+ $userDisplayName = OC_User::getDisplayName();
+ $this->assign( 'user_displayname', $userDisplayName );
$this->assign( 'user_uid', OC_User::getUser() );
$this->assign( 'appsmanagement_active', strpos(OC_Request::requestUri(), OC_Helper::linkToRoute('settings_apps')) === 0 );
- $this->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true));
- } else if ($renderas == 'error') {
+ $this->assign('enableAvatars', $this->config->getSystemValue('enable_avatars', true));
+ $this->assign('userAvatarSet', \OC_Helper::userAvatarSet(OC_User::getUser()));
+ } else if ($renderAs == 'error') {
parent::__construct('core', 'layout.guest', '', false);
$this->assign('bodyid', 'body-login');
- } else if ($renderas == 'guest') {
+ } else if ($renderAs == 'guest') {
parent::__construct('core', 'layout.guest');
$this->assign('bodyid', 'body-login');
} else {
parent::__construct('core', 'layout.base');
+
}
+ // Send the language to our layouts
+ $this->assign('language', OC_L10N::findLanguage());
- $versionParameter = '?v=' . md5(implode(OC_Util::getVersion()));
- $useAssetPipeline = $this->isAssetPipelineEnabled();
- if ($useAssetPipeline) {
- $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config') . $versionParameter);
+ if(empty(self::$versionHash)) {
+ self::$versionHash = md5(implode(',', OC_App::getAppVersions()));
+ }
+ $useAssetPipeline = self::isAssetPipelineEnabled();
+ if ($useAssetPipeline) {
+ $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config', array('v' => self::$versionHash)));
$this->generateAssets();
-
} else {
-
// Add the js files
- $jsfiles = self::findJavascriptFiles(OC_Util::$scripts);
+ $jsFiles = self::findJavascriptFiles(OC_Util::$scripts);
$this->assign('jsfiles', array(), false);
- if (OC_Config::getValue('installed', false) && $renderas!='error') {
- $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config') . $versionParameter);
+ if ($this->config->getSystemValue('installed', false) && $renderAs != 'error') {
+ $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config', array('v' => self::$versionHash)));
}
- foreach($jsfiles as $info) {
+ foreach($jsFiles as $info) {
$web = $info[1];
$file = $info[2];
- $this->append( 'jsfiles', $web.'/'.$file . $versionParameter);
+ $this->append( 'jsfiles', $web.'/'.$file . '?v=' . self::$versionHash);
}
// Add the css files
- $cssfiles = self::findStylesheetFiles(OC_Util::$styles);
+ $cssFiles = self::findStylesheetFiles(OC_Util::$styles);
$this->assign('cssfiles', array());
- foreach($cssfiles as $info) {
+ foreach($cssFiles as $info) {
$web = $info[1];
$file = $info[2];
- $this->append( 'cssfiles', $web.'/'.$file . $versionParameter);
+ $this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
}
}
}
@@ -112,10 +131,10 @@ class OC_TemplateLayout extends OC_Template {
// Read the selected theme from the config file
$theme = OC_Util::getTheme();
- // Read the detected formfactor and use the right file name.
- $fext = self::getFormFactorExtension();
+ // Read the detected form factor and use the right file name.
+ $formFactorExt = self::getFormFactorExtension();
- $locator = new \OC\Template\CSSResourceLocator( $theme, $fext,
+ $locator = new \OC\Template\CSSResourceLocator( $theme, $formFactorExt,
array( OC::$SERVERROOT => OC::$WEBROOT ),
array( OC::$THIRDPARTYROOT => OC::$THIRDPARTYWEBROOT ));
$locator->find($styles);
@@ -130,26 +149,31 @@ class OC_TemplateLayout extends OC_Template {
// Read the selected theme from the config file
$theme = OC_Util::getTheme();
- // Read the detected formfactor and use the right file name.
- $fext = self::getFormFactorExtension();
+ // Read the detected form factor and use the right file name.
+ $formFactorExt = self::getFormFactorExtension();
- $locator = new \OC\Template\JSResourceLocator( $theme, $fext,
+ $locator = new \OC\Template\JSResourceLocator( $theme, $formFactorExt,
array( OC::$SERVERROOT => OC::$WEBROOT ),
array( OC::$THIRDPARTYROOT => OC::$THIRDPARTYWEBROOT ));
$locator->find($scripts);
return $locator->getResources();
}
- public function generateAssets()
- {
+ public function generateAssets() {
$jsFiles = self::findJavascriptFiles(OC_Util::$scripts);
- $jsHash = self::hashScriptNames($jsFiles);
+ $jsHash = self::hashFileNames($jsFiles);
if (!file_exists("assets/$jsHash.js")) {
$jsFiles = array_map(function ($item) {
$root = $item[0];
$file = $item[2];
- return new FileAsset($root . '/' . $file, array(), $root, $file);
+ // no need to minifiy minified files
+ if (substr($file, -strlen('.min.js')) === '.min.js') {
+ return new FileAsset($root . '/' . $file, array(), $root, $file);
+ }
+ return new FileAsset($root . '/' . $file, array(
+ new JSMinFilter()
+ ), $root, $file);
}, $jsFiles);
$jsCollection = new AssetCollection($jsFiles);
$jsCollection->setTargetPath("assets/$jsHash.js");
@@ -159,7 +183,7 @@ class OC_TemplateLayout extends OC_Template {
}
$cssFiles = self::findStylesheetFiles(OC_Util::$styles);
- $cssHash = self::hashScriptNames($cssFiles);
+ $cssHash = self::hashFileNames($cssFiles);
if (!file_exists("assets/$cssHash.css")) {
$cssFiles = array_map(function ($item) {
@@ -169,12 +193,13 @@ class OC_TemplateLayout extends OC_Template {
$sourceRoot = \OC::$SERVERROOT;
$sourcePath = substr($assetPath, strlen(\OC::$SERVERROOT));
return new FileAsset(
- $assetPath,
+ $assetPath,
array(
- new CssRewriteFilter(),
+ new CssRewriteFilter(),
+ new CssMinFilter(),
new CssImportFilter()
),
- $sourceRoot,
+ $sourceRoot,
$sourcePath
);
}, $cssFiles);
@@ -190,47 +215,33 @@ class OC_TemplateLayout extends OC_Template {
}
/**
- * @param array $files
- * @return string
+ * Converts the absolute filepath to a relative path from \OC::$SERVERROOT
+ * @param string $filePath Absolute path
+ * @return string Relative path
+ * @throws Exception If $filePath is not under \OC::$SERVERROOT
*/
- private static function hashScriptNames($files)
- {
- $files = array_map(function ($item) {
- $root = $item[0];
- $file = $item[2];
- return $root . '/' . $file;
- }, $files);
+ public static function convertToRelativePath($filePath) {
+ $relativePath = explode(\OC::$SERVERROOT, $filePath);
+ if(count($relativePath) !== 2) {
+ throw new \Exception('$filePath is not under the \OC::$SERVERROOT');
+ }
- sort($files);
- return hash('md5', implode('', $files));
+ return $relativePath[1];
}
/**
- * @return bool
+ * @param array $files
+ * @return string
*/
- private function isAssetPipelineEnabled() {
- // asset management enabled?
- $useAssetPipeline = OC_Config::getValue('asset-pipeline.enabled', false);
- if (!$useAssetPipeline) {
- return false;
- }
- // assets folder exists?
- $assetDir = \OC::$SERVERROOT . '/assets';
- if (!is_dir($assetDir)) {
- if (!mkdir($assetDir)) {
- \OCP\Util::writeLog('assets',
- "Folder <$assetDir> does not exist and/or could not be generated.", \OCP\Util::ERROR);
- return false;
- }
+ private static function hashFileNames($files) {
+ foreach($files as $i => $file) {
+ $files[$i] = self::convertToRelativePath($file[0]).'/'.$file[2];
}
- // assets folder can be accessed?
- if (!touch($assetDir."/.oc")) {
- \OCP\Util::writeLog('assets',
- "Folder <$assetDir> could not be accessed.", \OCP\Util::ERROR);
- return false;
- }
- return $useAssetPipeline;
+ sort($files);
+ // include the apps' versions hash to invalidate the cached assets
+ $files[] = self::$versionHash;
+ return hash('md5', implode('', $files));
}
}
diff --git a/lib/private/tempmanager.php b/lib/private/tempmanager.php
new file mode 100644
index 00000000000..a3bb07f9d63
--- /dev/null
+++ b/lib/private/tempmanager.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+use OCP\ILogger;
+use OCP\ITempManager;
+
+class TempManager implements ITempManager {
+ /**
+ * Current temporary files and folders
+ *
+ * @var string[]
+ */
+ protected $current = array();
+
+ /**
+ * i.e. /tmp on linux systems
+ *
+ * @var string
+ */
+ protected $tmpBaseDir;
+
+ /**
+ * @var \OCP\ILogger
+ */
+ protected $log;
+
+ /**
+ * @param string $baseDir
+ * @param \OCP\ILogger $logger
+ */
+ public function __construct($baseDir, ILogger $logger) {
+ $this->tmpBaseDir = $baseDir;
+ $this->log = $logger;
+ }
+
+ protected function generatePath($postFix) {
+ return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . $postFix;
+ }
+
+ /**
+ * Create a temporary file and return the path
+ *
+ * @param string $postFix
+ * @return string
+ */
+ public function getTemporaryFile($postFix = '') {
+ $file = $this->generatePath($postFix);
+ if (is_writable($this->tmpBaseDir)) {
+ touch($file);
+ $this->current[] = $file;
+ return $file;
+ } else {
+ $this->log->warning(
+ 'Can not create a temporary file in directory {dir}. Check it exists and has correct permissions',
+ array(
+ 'dir' => $this->tmpBaseDir
+ )
+ );
+ return false;
+ }
+ }
+
+ /**
+ * Create a temporary folder and return the path
+ *
+ * @param string $postFix
+ * @return string
+ */
+ public function getTemporaryFolder($postFix = '') {
+ $path = $this->generatePath($postFix);
+ if (is_writable($this->tmpBaseDir)) {
+ mkdir($path);
+ $this->current[] = $path;
+ return $path . '/';
+ } else {
+ $this->log->warning(
+ 'Can not create a temporary folder in directory {dir}. Check it exists and has correct permissions',
+ array(
+ 'dir' => $this->tmpBaseDir
+ )
+ );
+ return false;
+ }
+ }
+
+ /**
+ * Remove the temporary files and folders generated during this request
+ */
+ public function clean() {
+ $this->cleanFiles($this->current);
+ }
+
+ protected function cleanFiles($files) {
+ foreach ($files as $file) {
+ if (file_exists($file)) {
+ try {
+ \OC_Helper::rmdirr($file);
+ } catch (\UnexpectedValueException $ex) {
+ $this->log->warning(
+ "Error deleting temporary file/folder: {file} - Reason: {error}",
+ array(
+ 'file' => $file,
+ 'error' => $ex->getMessage()
+ )
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * Remove old temporary files and folders that were failed to be cleaned
+ */
+ public function cleanOld() {
+ $this->cleanFiles($this->getOldFiles());
+ }
+
+ /**
+ * Get all temporary files and folders generated by oc older than an hour
+ *
+ * @return string[]
+ */
+ protected function getOldFiles() {
+ $cutOfTime = time() - 3600;
+ $files = array();
+ $dh = opendir($this->tmpBaseDir);
+ while (($file = readdir($dh)) !== false) {
+ if (substr($file, 0, 7) === 'oc_tmp_') {
+ $path = $this->tmpBaseDir . '/' . $file;
+ $mtime = filemtime($path);
+ if ($mtime < $cutOfTime) {
+ $files[] = $path;
+ }
+ }
+ }
+ return $files;
+ }
+}
diff --git a/lib/private/updater.php b/lib/private/updater.php
index 3eb2cd4ec4c..c4c70a3cc4a 100644
--- a/lib/private/updater.php
+++ b/lib/private/updater.php
@@ -66,13 +66,17 @@ class Updater extends BasicEmitter {
* @param string $updaterUrl the url to check, i.e. 'http://apps.owncloud.com/updater.php'
* @return array|bool
*/
- public function check($updaterUrl) {
+ public function check($updaterUrl = null) {
// Look up the cache - it is invalidated all 30 minutes
if ((\OC_Appconfig::getValue('core', 'lastupdatedat') + 1800) > time()) {
return json_decode(\OC_Appconfig::getValue('core', 'lastupdateResult'), true);
}
+ if (is_null($updaterUrl)) {
+ $updaterUrl = 'https://apps.owncloud.com/updater.php';
+ }
+
\OC_Appconfig::setValue('core', 'lastupdatedat', time());
if (\OC_Appconfig::getValue('core', 'installedat', '') == '') {
@@ -125,7 +129,6 @@ class Updater extends BasicEmitter {
* @return bool true if the operation succeeded, false otherwise
*/
public function upgrade() {
- \OC_DB::enableCaching(false);
\OC_Config::setValue('maintenance', true);
$installedVersion = \OC_Config::getValue('version', '0.0.0');
diff --git a/lib/private/user.php b/lib/private/user.php
index 641a329b0dd..3c23c19b015 100644
--- a/lib/private/user.php
+++ b/lib/private/user.php
@@ -224,17 +224,18 @@ class OC_User {
/**
* Try to login a user
- * @param string $uid The username of the user to log in
+ * @param string $loginname The login name of the user to log in
* @param string $password The password of the user
* @return boolean|null
*
* Log in a user and regenerate a new session - if the password is ok
*/
- public static function login($uid, $password) {
+ public static function login($loginname, $password) {
session_regenerate_id(true);
- $result = self::getUserSession()->login($uid, $password);
+ $result = self::getUserSession()->login($loginname, $password);
if ($result) {
- OC_Util::setupFS($uid);
+ //we need to pass the user name, which may differ from login name
+ OC_Util::setupFS(self::getUserSession()->getUser()->getUID());
}
return $result;
}
diff --git a/lib/private/user/user.php b/lib/private/user/user.php
index 993fb4c0c64..452261a75ff 100644
--- a/lib/private/user/user.php
+++ b/lib/private/user/user.php
@@ -89,8 +89,17 @@ class User implements IUser {
*/
public function getDisplayName() {
if (!isset($this->displayName)) {
+ $displayName = '';
if ($this->backend and $this->backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
- $this->displayName = $this->backend->getDisplayName($this->uid);
+ // get display name and strip whitespace from the beginning and end of it
+ $backendDisplayName = $this->backend->getDisplayName($this->uid);
+ if (is_string($backendDisplayName)) {
+ $displayName = trim($backendDisplayName);
+ }
+ }
+
+ if (!empty($displayName)) {
+ $this->displayName = $displayName;
} else {
$this->displayName = $this->uid;
}
@@ -105,7 +114,8 @@ class User implements IUser {
* @return bool
*/
public function setDisplayName($displayName) {
- if ($this->canChangeDisplayName()) {
+ $displayName = trim($displayName);
+ if ($this->canChangeDisplayName() && !empty($displayName)) {
$this->displayName = $displayName;
$result = $this->backend->setDisplayName($this->uid, $displayName);
return $result !== false;
diff --git a/lib/private/util.php b/lib/private/util.php
index c0a68c56223..6cd982c222e 100755..100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -64,6 +64,8 @@ class OC_Util {
return false;
}
+ \OC::$server->getEventLogger()->start('setup_fs', 'Setup filesystem');
+
// If we are not forced to load a specific user we load the one that is logged in
if ($user == "" && OC_User::isLoggedIn()) {
$user = OC_User::getUser();
@@ -88,6 +90,7 @@ class OC_Util {
}
if ($user != '' && !OCP\User::userExists($user)) {
+ \OC::$server->getEventLogger()->end('setup_fs');
return false;
}
@@ -115,16 +118,6 @@ class OC_Util {
return $storage;
});
- // copy skeleton for local storage only
- if (!isset($objectStore)) {
- $userRoot = OC_User::getHome($user);
- $userDirectory = $userRoot . '/files';
- if (!is_dir($userDirectory)) {
- mkdir($userDirectory, 0755, true);
- OC_Util::copySkeleton($userDirectory);
- }
- }
-
$userDir = '/' . $user . '/files';
//jail the user into his "home" directory
@@ -133,8 +126,12 @@ class OC_Util {
$fileOperationProxy = new OC_FileProxy_FileOperations();
OC_FileProxy::register($fileOperationProxy);
+ //trigger creation of user home and /files folder
+ \OC::$server->getUserFolder($user);
+
OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $userDir));
}
+ \OC::$server->getEventLogger()->end('setup_fs');
return true;
}
@@ -208,33 +205,44 @@ class OC_Util {
}
/**
- * copies the user skeleton files into the fresh user home files
+ * copies the skeleton to the users /files
*
- * @param string $userDirectory
+ * @param \OC\User\User $user
+ * @param \OCP\Files\Folder $userDirectory
*/
- public static function copySkeleton($userDirectory) {
- $skeletonDirectory = OC_Config::getValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
+ public static function copySkeleton(\OC\User\User $user, \OCP\Files\Folder $userDirectory) {
+
+ $skeletonDirectory = \OCP\Config::getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
+
if (!empty($skeletonDirectory)) {
- OC_Util::copyr($skeletonDirectory, $userDirectory);
+ \OCP\Util::writeLog(
+ 'files_skeleton',
+ 'copying skeleton for '.$user->getUID().' from '.$skeletonDirectory.' to '.$userDirectory->getFullPath('/'),
+ \OCP\Util::DEBUG
+ );
+ self::copyr($skeletonDirectory, $userDirectory);
+ // update the file cache
+ $userDirectory->getStorage()->getScanner()->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE);
}
}
/**
- * copies a directory recursively
+ * copies a directory recursively by using streams
*
* @param string $source
- * @param string $target
+ * @param \OCP\Files\Folder $target
* @return void
*/
- public static function copyr($source, $target) {
+ public static function copyr($source, \OCP\Files\Folder $target) {
$dir = opendir($source);
- @mkdir($target);
while (false !== ($file = readdir($dir))) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if (is_dir($source . '/' . $file)) {
- OC_Util::copyr($source . '/' . $file, $target . '/' . $file);
+ $child = $target->newFolder($file);
+ self::copyr($source . '/' . $file, $child);
} else {
- copy($source . '/' . $file, $target . '/' . $file);
+ $child = $target->newFile($file);
+ stream_copy_to_stream(fopen($source . '/' . $file,'r'), $child->fopen('w'));
}
}
}
@@ -412,7 +420,7 @@ class OC_Util {
* @param \OCP\IConfig $config
* @return array arrays with error messages and hints
*/
- public static function checkServer($config) {
+ public static function checkServer(\OCP\IConfig $config) {
$l = \OC::$server->getL10N('lib');
$errors = array();
$CONFIG_DATADIRECTORY = $config->getSystemValue('datadirectory', OC::$SERVERROOT . '/data');
@@ -428,12 +436,9 @@ class OC_Util {
}
$webServerRestart = false;
- //check for database drivers
- if (!(is_callable('sqlite_open') or class_exists('SQLite3'))
- and !is_callable('mysql_connect')
- and !is_callable('pg_connect')
- and !is_callable('oci_connect')
- ) {
+ $setup = new OC_Setup($config);
+ $availableDatabases = $setup->getSupportedDatabases();
+ if (empty($availableDatabases)) {
$errors[] = array(
'error' => $l->t('No database drivers (sqlite, mysql, or postgresql) installed.'),
'hint' => '' //TODO: sane hint
@@ -1301,7 +1306,7 @@ class OC_Util {
* @param \OCP\IConfig $config
* @return bool whether the core or any app needs an upgrade
*/
- public static function needUpgrade($config) {
+ public static function needUpgrade(\OCP\IConfig $config) {
if ($config->getSystemValue('installed', false)) {
$installedVersion = $config->getSystemValue('version', '0.0.0');
$currentVersion = implode('.', OC_Util::getVersion());
diff --git a/lib/private/vobject.php b/lib/private/vobject.php
index 94e3470ff08..9d121c17d79 100644
--- a/lib/private/vobject.php
+++ b/lib/private/vobject.php
@@ -72,7 +72,8 @@ class OC_VObject{
*/
public static function unescapeSemicolons($value) {
$array = explode(';', $value);
- for($i=0;$i<count($array);$i++) {
+ $arrayCount = count($array);
+ for($i = 0; $i < $arrayCount; $i++) {
if(substr($array[$i], -2, 2)=="\\\\") {
if(isset($array[$i+1])) {
$array[$i] = substr($array[$i], 0, count($array[$i])-2).';'.$array[$i+1];
diff --git a/lib/public/db.php b/lib/public/db.php
index ba3a4724ce0..e8fc817106e 100644
--- a/lib/public/db.php
+++ b/lib/public/db.php
@@ -97,6 +97,13 @@ class DB {
}
/**
+ * Rollback the database changes done during a transaction that is in progress
+ */
+ public static function rollback() {
+ \OC_DB::rollback();
+ }
+
+ /**
* Check if a result is an error, works with Doctrine
* @param mixed $result
* @return bool
diff --git a/lib/public/diagnostics/ievent.php b/lib/public/diagnostics/ievent.php
new file mode 100644
index 00000000000..a2a3461f68a
--- /dev/null
+++ b/lib/public/diagnostics/ievent.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Diagnostics;
+
+interface IEvent {
+ /**
+ * @return string
+ */
+ public function getId();
+
+ /**
+ * @return string
+ */
+ public function getDescription();
+
+ /**
+ * @return float
+ */
+ public function getStart();
+
+ /**
+ * @return float
+ */
+ public function getEnd();
+
+ /**
+ * @return float
+ */
+ public function getDuration();
+}
diff --git a/lib/public/diagnostics/ieventlogger.php b/lib/public/diagnostics/ieventlogger.php
new file mode 100644
index 00000000000..cd9f2768ca3
--- /dev/null
+++ b/lib/public/diagnostics/ieventlogger.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Diagnostics;
+
+interface IEventLogger {
+ /**
+ * Mark the start of an event
+ *
+ * @param string $id
+ * @param string $description
+ */
+ public function start($id, $description);
+
+ /**
+ * Mark the end of an event
+ *
+ * @param string $id
+ */
+ public function end($id);
+
+ /**
+ * @param string $id
+ * @param string $description
+ * @param float $start
+ * @param float $end
+ */
+ public function log($id, $description, $start, $end);
+
+ /**
+ * @return \OCP\Diagnostics\IEvent[]
+ */
+ public function getEvents();
+}
diff --git a/lib/public/diagnostics/iquery.php b/lib/public/diagnostics/iquery.php
new file mode 100644
index 00000000000..f1111e069bb
--- /dev/null
+++ b/lib/public/diagnostics/iquery.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Diagnostics;
+
+interface IQuery {
+ /**
+ * @return string
+ */
+ public function getSql();
+
+ /**
+ * @return array
+ */
+ public function getParams();
+
+ /**
+ * @return float
+ */
+ public function getDuration();
+}
diff --git a/lib/public/diagnostics/iquerylogger.php b/lib/public/diagnostics/iquerylogger.php
new file mode 100644
index 00000000000..0fba9eb8b10
--- /dev/null
+++ b/lib/public/diagnostics/iquerylogger.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP\Diagnostics;
+
+use Doctrine\DBAL\Logging\SQLLogger;
+
+interface IQueryLogger extends SQLLogger {
+ /**
+ * @param string $sql
+ * @param array $params
+ * @param array $types
+ */
+ public function startQuery($sql, array $params = null, array $types = null);
+
+ public function stopQuery();
+
+ /**
+ * @return \OCP\Diagnostics\IQuery[]
+ */
+ public function getQueries();
+}
diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php
index 404cf030dee..554fee5b22f 100644
--- a/lib/public/iconfig.php
+++ b/lib/public/iconfig.php
@@ -46,7 +46,7 @@ interface IConfig {
* Looks up a system wide defined value
*
* @param string $key the key of the value, under which it was saved
- * @param string $default the default value to be returned if the value isn't set
+ * @param mixed $default the default value to be returned if the value isn't set
* @return mixed the value or $default
*/
public function getSystemValue($key, $default = '');
diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php
index 3e6624e07e9..ce17d293e86 100644
--- a/lib/public/idbconnection.php
+++ b/lib/public/idbconnection.php
@@ -44,6 +44,32 @@ interface IDBConnection {
public function prepare($sql, $limit=null, $offset=null);
/**
+ * Executes an, optionally parameterized, SQL query.
+ *
+ * If the query is parameterized, a prepared statement is used.
+ * If an SQLLogger is configured, the execution is logged.
+ *
+ * @param string $query The SQL query to execute.
+ * @param string[] $params The parameters to bind to the query, if any.
+ * @param array $types The types the previous parameters are in.
+ * @return \Doctrine\DBAL\Driver\Statement The executed statement.
+ */
+ public function executeQuery($query, array $params = array(), $types = array());
+
+ /**
+ * Executes an SQL INSERT/UPDATE/DELETE query with the given parameters
+ * and returns the number of affected rows.
+ *
+ * This method supports PDO binding types as well as DBAL mapping types.
+ *
+ * @param string $query The SQL query.
+ * @param array $params The query parameters.
+ * @param array $types The parameter types.
+ * @return integer The number of affected rows.
+ */
+ public function executeUpdate($query, array $params = array(), array $types = array());
+
+ /**
* Used to get the id of the just inserted element
* @param string $table the name of the table where we inserted the item
* @return int the id of the inserted element
@@ -71,19 +97,16 @@ interface IDBConnection {
/**
* Start a transaction
- * @return bool TRUE on success or FALSE on failure
*/
public function beginTransaction();
/**
* Commit the database changes done during a transaction that is in progress
- * @return bool TRUE on success or FALSE on failure
*/
public function commit();
/**
* Rollback the database changes done during a transaction that is in progress
- * @return bool TRUE on success or FALSE on failure
*/
public function rollBack();
@@ -92,4 +115,47 @@ interface IDBConnection {
* @return string
*/
public function getError();
+
+ /**
+ * Fetch the SQLSTATE associated with the last database operation.
+ *
+ * @return integer The last error code.
+ */
+ public function errorCode();
+
+ /**
+ * Fetch extended error information associated with the last database operation.
+ *
+ * @return array The last error information.
+ */
+ public function errorInfo();
+
+ /**
+ * Establishes the connection with the database.
+ *
+ * @return bool
+ */
+ public function connect();
+
+ /**
+ * Close the database connection
+ */
+ public function close();
+
+ /**
+ * Quotes a given input parameter.
+ *
+ * @param mixed $input Parameter to be quoted.
+ * @param int $type Type of the parameter.
+ * @return string The quoted parameter.
+ */
+ public function quote($input, $type = \PDO::PARAM_STR);
+
+ /**
+ * Gets the DatabasePlatform instance that provides all the metadata about
+ * the platform this driver connects to.
+ *
+ * @return \Doctrine\DBAL\Platforms\AbstractPlatform The database platform.
+ */
+ public function getDatabasePlatform();
}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index a093ff3a640..c1592551978 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -248,4 +248,27 @@ interface IServerContainer {
* @return \OC\HTTPHelper
*/
function getHTTPHelper();
+
+ /**
+ * Get the active event logger
+ *
+ * @return \OCP\Diagnostics\IEventLogger
+ */
+ function getEventLogger();
+
+ /**
+ * Get the active query logger
+ *
+ * The returned logger only logs data when debug mode is enabled
+ *
+ * @return \OCP\Diagnostics\IQueryLogger
+ */
+ function getQueryLogger();
+
+ /**
+ * Get the manager for temporary files and folders
+ *
+ * @return \OCP\ITempManager
+ */
+ function getTempManager();
}
diff --git a/lib/public/itagmanager.php b/lib/public/itagmanager.php
index 40487de42b4..54daa5cc1cb 100644
--- a/lib/public/itagmanager.php
+++ b/lib/public/itagmanager.php
@@ -48,8 +48,9 @@ interface ITagManager {
* @see \OCP\ITags
* @param string $type The type identifier e.g. 'contact' or 'event'.
* @param array $defaultTags An array of default tags to be used if none are stored.
+ * @param boolean $includeShared Whether to include tags for items shared with this user by others.
* @return \OCP\ITags
*/
- public function load($type, $defaultTags=array());
+ public function load($type, $defaultTags=array(), $includeShared=false);
-} \ No newline at end of file
+}
diff --git a/lib/public/itags.php b/lib/public/itags.php
index 1cba07e9b53..4514746bbe8 100644
--- a/lib/public/itags.php
+++ b/lib/public/itags.php
@@ -54,6 +54,15 @@ interface ITags {
public function isEmpty();
/**
+ * Returns an array mapping a given tag's properties to its values:
+ * ['id' => 0, 'name' = 'Tag', 'owner' = 'User', 'type' => 'tagtype']
+ *
+ * @param string $id The ID of the tag that is going to be mapped
+ * @return array|false
+ */
+ public function getTag($id);
+
+ /**
* Get the tags for a specific user.
*
* This returns an array with id/name maps:
@@ -85,6 +94,16 @@ interface ITags {
public function hasTag($name);
/**
+ * Checks whether a tag is saved for the given user,
+ * disregarding the ones shared with him or her.
+ *
+ * @param string $name The tag name to check for.
+ * @param string $user The user whose tags are to be checked.
+ * @return bool
+ */
+ public function userHasTag($name, $user);
+
+ /**
* Add a new tag.
*
* @param string $name A string with a name of the tag
@@ -95,7 +114,7 @@ interface ITags {
/**
* Rename tag.
*
- * @param string $from The name of the existing tag
+ * @param string|integer $from The name or ID of the existing tag
* @param string $to The new name of the tag.
* @return bool
*/
@@ -162,11 +181,11 @@ interface ITags {
public function unTag($objid, $tag);
/**
- * Delete tags from the
+ * Delete tags from the database
*
- * @param string[] $names An array of tags to delete
+ * @param string[]|integer[] $names An array of tags (names or IDs) to delete
* @return bool Returns false on error
*/
public function delete($names);
-} \ No newline at end of file
+}
diff --git a/lib/public/itempmanager.php b/lib/public/itempmanager.php
new file mode 100644
index 00000000000..ebd94978038
--- /dev/null
+++ b/lib/public/itempmanager.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP;
+
+interface ITempManager {
+ /**
+ * Create a temporary file and return the path
+ *
+ * @param string $postFix
+ * @return string
+ */
+ public function getTemporaryFile($postFix = '');
+
+ /**
+ * Create a temporary folder and return the path
+ *
+ * @param string $postFix
+ * @return string
+ */
+ public function getTemporaryFolder($postFix = '');
+
+ /**
+ * Remove the temporary files and folders generated during this request
+ */
+ public function clean();
+
+ /**
+ * Remove old temporary files and folders that were failed to be cleaned
+ */
+ public function cleanOld();
+}
diff --git a/lib/repair/assetcache.php b/lib/repair/assetcache.php
new file mode 100644
index 00000000000..d7677a10d11
--- /dev/null
+++ b/lib/repair/assetcache.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Repair;
+
+use Doctrine\DBAL\Platforms\MySqlPlatform;
+use OC\Hooks\BasicEmitter;
+
+class AssetCache extends BasicEmitter implements \OC\RepairStep {
+
+ public function getName() {
+ return 'Clear asset cache after upgrade';
+ }
+
+ public function run() {
+ if (!\OC_Template::isAssetPipelineEnabled()) {
+ $this->emit('\OC\Repair', 'info', array('Asset pipeline disabled -> nothing to do'));
+ return;
+ }
+ $assetDir = \OC::$SERVERROOT . '/assets';
+ \OC_Helper::rmdirr($assetDir, false);
+ $this->emit('\OC\Repair', 'info', array('Asset cache cleared.'));
+ }
+}
+
diff --git a/settings/admin.php b/settings/admin.php
index f77145e0340..f77145e0340 100755..100644
--- a/settings/admin.php
+++ b/settings/admin.php
diff --git a/settings/controller/mailsettingscontroller.php b/settings/controller/mailsettingscontroller.php
index 583aa98dc8e..d050a5ea03e 100644
--- a/settings/controller/mailsettingscontroller.php
+++ b/settings/controller/mailsettingscontroller.php
@@ -134,7 +134,7 @@ class MailSettingsController extends Controller {
try {
$this->mail->send($email, $this->userSession->getUser()->getDisplayName(),
$this->l10n->t('test email settings'),
- $this->l10n->t('If you received this email, the settings seems to be correct.'),
+ $this->l10n->t('If you received this email, the settings seem to be correct.'),
$this->defaultMailAddress,
$this->defaults->getName()
);
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 0cb5fe3e15c..f7ac5dc752d 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -50,7 +50,7 @@ var UserList = {
.data('username', username)
.data('user-groups', groups);
if ($tr.find('td.subadmins').length > 0) {
- subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'Group Admin') + '">')
+ subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'no group') + '">')
.data('username', username)
.data('user-groups', groups)
.data('subadmin', subadmin);
diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php
index ab69d19317c..bd62f1f1165 100644
--- a/settings/l10n/ar.php
+++ b/settings/l10n/ar.php
@@ -1,15 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "ادخال خاطئ لقيمة %s",
-"Saved" => "حفظ",
-"test email settings" => "إعدادات البريد التجريبي",
-"If you received this email, the settings seem to be correct." => "تبدوا الاعدادت صحيحة اذا تلقيت هذا البريد الالكتروني",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "حدث خطأ اثناء ارسال البريد الالكتروني ، الرجاء مراجعة اعداداتك",
-"Email sent" => "تم ارسال البريد الالكتروني",
-"Send mode" => "وضعية الإرسال",
-"Encryption" => "التشفير",
-"Authentication method" => "أسلوب التطابق",
-"Unable to load list from App Store" => "فشل تحميل القائمة من الآب ستور",
+"Enabled" => "مفعلة",
"Authentication error" => "لم يتم التأكد من الشخصية بنجاح",
"Your full name has been changed." => "اسمك الكامل تم تغييره.",
"Unable to change full name" => "لم يتم التمكن من تغيير اسمك الكامل",
@@ -32,21 +23,20 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "خطا في كلمة مرور المسؤول المستردة, يرجى التاكد من كلمة المرور والمحاولة مرة اخرى.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end لا يدعم تغيير كلمة المرور, لاكن مفتاح تشفير المستخدمين تم تحديثة بنجاح.",
"Unable to change password" => "لا يمكن تغيير كلمة المرور",
+"Saved" => "حفظ",
+"test email settings" => "إعدادات البريد التجريبي",
+"If you received this email, the settings seem to be correct." => "تبدوا الاعدادت صحيحة اذا تلقيت هذا البريد الالكتروني",
+"Email sent" => "تم ارسال البريد الالكتروني",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.",
"Sending..." => "جاري الارسال ...",
"All" => "الكل",
-"User Documentation" => "كتاب توثيق المستخدم",
-"Update to {appversion}" => "تم التحديث الى ",
-"Uninstall App" => "أزالة تطبيق",
-"Disable" => "إيقاف",
-"Enable" => "تفعيل",
"Please wait...." => "الرجاء الانتظار ...",
"Error while disabling app" => "خطا عند تعطيل البرنامج",
+"Disable" => "إيقاف",
+"Enable" => "تفعيل",
"Error while enabling app" => "خطا عند تفعيل البرنامج ",
"Updating...." => "جاري التحديث ...",
"Error while updating app" => "حصل خطأ أثناء تحديث التطبيق",
-"Error" => "خطأ",
-"Update" => "حدث",
"Updated" => "تم التحديث بنجاح",
"Uninstalling ...." => "جاري إلغاء التثبيت ...",
"Uninstall" => "ألغاء التثبيت",
@@ -59,7 +49,6 @@ $TRANSLATIONS = array(
"Decrypting files... Please wait, this can take some time." => "فك تشفير الملفات... يرجى الانتظار, من الممكن ان ياخذ بعض الوقت.",
"Groups" => "مجموعات",
"undo" => "تراجع",
-"Group Admin" => "مدير المجموعة",
"never" => "بتاتا",
"add group" => "اضافة مجموعة",
"A valid username must be provided" => "يجب ادخال اسم مستخدم صحيح",
@@ -67,6 +56,7 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "يجب ادخال كلمة مرور صحيحة",
"Warning: Home directory for user \"{user}\" already exists" => "تحذير: المجلد الرئيسي لـ المستخدم \"{user}\" موجود مسبقا",
"__language_name__" => "__language_name__",
+"Encryption" => "التشفير",
"Everything (fatal issues, errors, warnings, info, debug)" => "كل شيء (مشاكل فادحة, اخطاء , تحذيرات , معلومات , تصحيح الاخطاء)",
"Info, warnings, errors and fatal issues" => "معلومات , تحذيرات , اخطاء , مشاكل فادحة ",
"Warnings, errors and fatal issues" => "تحذيرات , اخطاء , مشاكل فادحة ",
@@ -102,6 +92,8 @@ $TRANSLATIONS = array(
"Forces the clients to connect to %s via an encrypted connection." => "اجبار العميل للاتصال بـ %s عن طريق اتصال مشفر",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "يرجى الاتصال بـ %s عن طريق HTTPS لتفعيل او تعطيل SSL enforcement.",
"Email Server" => "خادم البريد الالكتروني",
+"Send mode" => "وضعية الإرسال",
+"Authentication method" => "أسلوب التطابق",
"Server address" => "عنوان الخادم",
"Port" => "المنفذ",
"Log" => "سجل",
@@ -110,12 +102,10 @@ $TRANSLATIONS = array(
"Less" => "أقل",
"Version" => "إصدار",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "طوّر من قبل <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud مجتمع</a>, الـ <a href=\"https://github.com/owncloud\" target=\"_blank\">النص المصدري</a> مرخص بموجب <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">رخصة أفيرو العمومية</abbr></a>.",
-"Add your App" => "أضف تطبيقاتك",
-"More Apps" => "المزيد من التطبيقات",
-"Select an App" => "إختر تطبيقاً",
+"by" => "من قبل",
"Documentation:" => "التوثيق",
-"See application page at apps.owncloud.com" => "راجع صفحة التطبيق على apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ترخيص من قبل <span class=\"author\"></span>",
+"User Documentation" => "كتاب توثيق المستخدم",
+"Uninstall App" => "أزالة تطبيق",
"Administrator Documentation" => "كتاب توثيق المدير",
"Online Documentation" => "توثيق متوفر على الشبكة",
"Forum" => "منتدى",
diff --git a/settings/l10n/ast.php b/settings/l10n/ast.php
index 61e82b0886d..d6a56328ff9 100644
--- a/settings/l10n/ast.php
+++ b/settings/l10n/ast.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Introdúxose un valor non válidu pa %s",
-"Saved" => "Guardáu",
-"test email settings" => "probar configuración de corréu",
-"If you received this email, the settings seem to be correct." => "Si recibisti esti mensaxe de corréu-e, la to configuración ta correuta.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Hebo un problema al unviar el mensaxe. Revisa la configuración.",
-"Email sent" => "Corréu-e unviáu",
-"You need to set your user email before being able to send test emails." => "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.",
-"Send mode" => "Mou d'unviu",
-"Encryption" => "Cifráu",
-"Authentication method" => "Métodu d'autenticación",
-"Unable to load list from App Store" => "Nun pudo cargase la llista dende'l App Store",
+"Enabled" => "Habilitar",
"Authentication error" => "Fallu d'autenticación",
"Your full name has been changed." => "Camudóse'l nome completu.",
"Unable to change full name" => "Nun pue camudase'l nome completu",
@@ -40,21 +30,20 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Contraseña de recuperación d'alministrador incorreuta. Comprueba la contraseña ya inténtalo dempués.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "El back-end nun sofita cambeos de contraseña, pero la contraseña de cifráu del usuariu anovóse afechiscamente.",
"Unable to change password" => "Nun pudo camudase la contraseña",
+"Saved" => "Guardáu",
+"test email settings" => "probar configuración de corréu",
+"If you received this email, the settings seem to be correct." => "Si recibisti esti mensaxe de corréu-e, la to configuración ta correuta.",
+"Email sent" => "Corréu-e unviáu",
+"You need to set your user email before being able to send test emails." => "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.",
"Sending..." => "Unviando...",
"All" => "Toos",
-"User Documentation" => "Documentación d'usuariu",
-"Admin Documentation" => "Documentación p'alministradores",
-"Update to {appversion}" => "Anovar a {appversion}",
-"Uninstall App" => "Desinstalar aplicación",
-"Disable" => "Desactivar",
-"Enable" => "Activar",
"Please wait...." => "Espera, por favor....",
"Error while disabling app" => "Fallu mientres se desactivaba l'aplicación",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
"Error while enabling app" => "Fallu mientres s'activaba l'aplicación",
"Updating...." => "Anovando....",
"Error while updating app" => "Fallu mientres s'anovaba l'aplicación",
-"Error" => "Fallu",
-"Update" => "Anovar",
"Updated" => "Anováu",
"Uninstalling ...." => "Desinstalando ...",
"Error while uninstalling app" => "Fallu mientres se desinstalaba l'aplicación",
@@ -75,7 +64,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Hai d'escribir un nome de grupu válidu",
"deleted {groupName}" => "desaniciáu {groupName}",
"undo" => "desfacer",
-"Group Admin" => "Alministrador del Grupu",
"never" => "enxamás",
"deleted {userName}" => "desaniciáu {userName}",
"add group" => "amestar Grupu",
@@ -84,6 +72,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Tien d'apurrise una contraseña válida",
"Warning: Home directory for user \"{user}\" already exists" => "Avisu: el direutoriu d'aniciu pal usuariu \"{user}\" yá esiste.",
"__language_name__" => "Asturianu",
+"SSL root certificates" => "Certificaos raíz SSL",
+"Encryption" => "Cifráu",
"Everything (fatal issues, errors, warnings, info, debug)" => "Too (Información, Avisos, Fallos, debug y problemes fatales)",
"Info, warnings, errors and fatal issues" => "Información, Avisos, Fallos y problemes fatales",
"Warnings, errors and fatal issues" => "Avisos, fallos y problemes fatales",
@@ -139,8 +129,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Por favor, conéutate a %s al traviés de HTTPS p'habilitar o deshabilitar l'aplicación de SSL.",
"Email Server" => "Sirvidor de corréu-e",
"This is used for sending out notifications." => "Esto úsase pa unviar notificaciones.",
+"Send mode" => "Mou d'unviu",
"From address" => "Dende la direición",
"mail" => "corréu",
+"Authentication method" => "Métodu d'autenticación",
"Authentication required" => "Necesítase autenticación",
"Server address" => "Direición del sirvidor",
"Port" => "Puertu",
@@ -155,14 +147,12 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desendolcáu pola <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">códigu fonte</a> ta baxo llicencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Amiesta la to aplicación",
-"More Apps" => "Más aplicaciones",
-"Select an App" => "Esbillar una aplicación",
+"by" => "por",
"Documentation:" => "Documentación:",
-"See application page at apps.owncloud.com" => "Ver la páxina d'aplicaciones en apps.owncloud.com",
-"See application website" => "Ver sitiu web de l'aplicación",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-llicencia otorgada por <span class=\"author\"></span>",
+"User Documentation" => "Documentación d'usuariu",
+"Admin Documentation" => "Documentación p'alministradores",
"Enable only for specific groups" => "Habilitar namái pa grupos específicos",
+"Uninstall App" => "Desinstalar aplicación",
"Administrator Documentation" => "Documentación d'alministrador",
"Online Documentation" => "Documentación en llinia",
"Forum" => "Foru",
@@ -192,7 +182,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Esbillar como imaxe de perfil",
"Language" => "Llingua",
"Help translate" => "Ayúdanos nes traducciones",
-"SSL root certificates" => "Certificaos raíz SSL",
"Import Root Certificate" => "Importar certificáu raíz",
"The encryption app is no longer enabled, please decrypt all your files" => "L'aplicación de cifráu yá nun ta activada, descifra tolos ficheros",
"Log-in password" => "Contraseña d'accesu",
diff --git a/settings/l10n/az.php b/settings/l10n/az.php
index 0c17c66ba56..24c06054c7b 100644
--- a/settings/l10n/az.php
+++ b/settings/l10n/az.php
@@ -1,16 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "%s üçün yalnış təyinat mənimsədildi",
-"Saved" => "Saxlanıldı",
-"test email settings" => "sınaq məktubu quraşdırmaları",
-"If you received this email, the settings seem to be correct." => "Əgər siz bu məktubu aldınızsa, demək quraşdırmalar düzgündür.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Məktubun göndərilməsində səhv baş verdi. Xahiş edirik öz configlərinizə yenidən baxasınız.",
-"Email sent" => "Məktub göndərildi",
-"You need to set your user email before being able to send test emails." => "Test məktubu göndərməzdən öncə, siz öz istifadəçi poçtunuzu təyiin etməlisiniz.",
-"Send mode" => "Göndərmə rejimi",
-"Encryption" => "Şifrələnmə",
-"Authentication method" => "Qeydiyyat metodikası",
-"Unable to load list from App Store" => "Listi App Store-dan yükləmək mümkün deyil",
"Authentication error" => "Təyinat metodikası",
"Your full name has been changed." => "Sizin tam adınız dəyişdirildi.",
"Unable to change full name" => "Tam adı dəyişmək olmur",
@@ -40,22 +29,21 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "İnzibatçı geriyə qayıdış şifrəsi yalnışdır. Xahiş olunur şifrəni yoxlayıb yenidən təkrar edəsiniz.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "İnzibatçı mərkəzi şifrə dəyişilməsini dəstəkləmir ancaq, istifadəçi şifrələnmə açarı uğurla yeniləndi.",
"Unable to change password" => "Şifrəni dəyişmək olmur",
+"Saved" => "Saxlanıldı",
+"test email settings" => "sınaq məktubu quraşdırmaları",
+"If you received this email, the settings seem to be correct." => "Əgər siz bu məktubu aldınızsa, demək quraşdırmalar düzgündür.",
+"Email sent" => "Məktub göndərildi",
+"You need to set your user email before being able to send test emails." => "Test məktubu göndərməzdən öncə, siz öz istifadəçi poçtunuzu təyiin etməlisiniz.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?",
"Add trusted domain" => "İnamlı domainlərə əlavə et",
"Sending..." => "Göndərilir...",
-"User Documentation" => "İstifadəçi sənədləri",
-"Admin Documentation" => "İnzibatçı sənədləri",
-"Update to {appversion}" => "{appversion} -a yenilə",
-"Uninstall App" => "Proqram təminatını sil",
-"Disable" => "Dayandır",
-"Enable" => "İşə sal",
"Please wait...." => "Xahiş olunur gözləyəsiniz.",
"Error while disabling app" => "Proqram təminatını dayandırdıqda səhv baş verdi",
+"Disable" => "Dayandır",
+"Enable" => "İşə sal",
"Error while enabling app" => "Proqram təminatını işə saldıqda səhv baş verdi",
"Updating...." => "Yenilənir...",
"Error while updating app" => "Proqram təminatı yeniləndikdə səhv baş verdi",
-"Error" => "Səhv",
-"Update" => "Yenilənmə",
"Updated" => "Yeniləndi",
"Uninstalling ...." => "Silinir...",
"Error while uninstalling app" => "Proqram təminatını sildikdə səhv baş verdi",
@@ -76,7 +64,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Düzgün qrup adı təyin edilməlidir",
"deleted {groupName}" => "{groupName} silindi",
"undo" => "geriyə",
-"Group Admin" => "Qrup İnzibatçısı",
"never" => "heç vaxt",
"deleted {userName}" => "{userName} silindi",
"add group" => "qrupu əlavə et",
@@ -85,6 +72,7 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Düzgün şifrə daxil edilməlidir",
"Warning: Home directory for user \"{user}\" already exists" => "Xəbərdarlıq: \"{user}\" istfadəçisi üçün ev qovluğu artıq mövcuddur.",
"__language_name__" => "__AZ_Azerbaijan__",
+"Encryption" => "Şifrələnmə",
"Everything (fatal issues, errors, warnings, info, debug)" => "Hər şey(ən pis hadisələr, səhvlər, xəbərdarlıqlar, məlmat, araşdırma səhvləri)",
"Info, warnings, errors and fatal issues" => "Məlmat, xəbərdarlıqlar, səhvlər və ən pis hadisələr",
"Warnings, errors and fatal issues" => "Xəbərdarlıqlar, səhvlər və ən pis hadisələr",
@@ -102,7 +90,13 @@ $TRANSLATIONS = array(
"Module 'fileinfo' missing" => "'fileinfo' modulu çatışmır",
"Your PHP version is outdated" => "Sizin PHP versiyası köhnəlib",
"PHP charset is not set to UTF-8" => "PHP simvol tipi UTF-8 deyil",
+"Send mode" => "Göndərmə rejimi",
+"Authentication method" => "Qeydiyyat metodikası",
"More" => "Yenə",
+"by" => "onunla",
+"User Documentation" => "İstifadəçi sənədləri",
+"Admin Documentation" => "İnzibatçı sənədləri",
+"Uninstall App" => "Proqram təminatını sil",
"Get the apps to sync your files" => "Fayllarınızın sinxronizasiyası üçün proqramları götürün",
"Password" => "Şifrə",
"Change password" => "Şifrəni dəyiş",
diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php
index 335c81f81f0..786ad676868 100644
--- a/settings/l10n/bg_BG.php
+++ b/settings/l10n/bg_BG.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Зададена е невалидна стойност за %s.",
-"Saved" => "Запис",
-"test email settings" => "провери имейл настройките",
-"If you received this email, the settings seem to be correct." => "Ако си получил този имейл, настройките са правилни.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Настъпи проблем при изпращането на имейла. Моля, провери настройките.",
-"Email sent" => "Имейлът е изпратен",
-"You need to set your user email before being able to send test emails." => "Трябва да зададеш своя имейл преди да можеш да изпратиш проверяващи имейли.",
-"Send mode" => "Режим на изпращане",
-"Encryption" => "Криптиране",
-"Authentication method" => "Метод за отризиране",
-"Unable to load list from App Store" => "Неуспешен опит за зареждане на списъка от Магазина за Програми.",
+"Enabled" => "Включено",
+"Not enabled" => "Изключено",
+"Recommended" => "Препоръчано",
"Authentication error" => "Възникна проблем с идентификацията",
"Your full name has been changed." => "Пълното ти име е променено.",
"Unable to change full name" => "Неуспешна промяна на пълното име.",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Грешна администраторска парола за възстановяване. Моля, провери паролата и опитай отново.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Сървърът не позволява смяна на паролата, но ключът за криптиране беше успешно обновен.",
"Unable to change password" => "Неуспешна смяна на паролата.",
+"Saved" => "Запис",
+"test email settings" => "провери имейл настройките",
+"If you received this email, the settings seem to be correct." => "Ако си получил този имейл, настройките са правилни.",
+"A problem occurred while sending the email. Please revise your settings." => "Настъпи проблем при изпращането на имейла. Моля, провери настройките.",
+"Email sent" => "Имейлът е изпратен",
+"You need to set your user email before being able to send test emails." => "Трябва да зададеш своя имейл преди да можеш да изпратиш проверяващи имейли.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Сигурен ли си, че искащ да добавиш \"{domain}\" сигурен домейн?",
"Add trusted domain" => "Добави сигурен домейн",
"Sending..." => "Изпращане...",
"All" => "Всички",
-"User Documentation" => "Потребителска Документация",
-"Admin Documentation" => "Админ Документация",
-"Update to {appversion}" => "Обновяване до {appversion}.",
-"Uninstall App" => "Премахни Приложението",
-"Disable" => "Изключено",
-"Enable" => "Включено",
"Please wait...." => "Моля изчакайте....",
"Error while disabling app" => "Грешка при изключването на приложението",
+"Disable" => "Изключено",
+"Enable" => "Включено",
"Error while enabling app" => "Грешка при включване на приложението",
"Updating...." => "Обновява се...",
"Error while updating app" => "Грешка при обновяване на приложението.",
-"Error" => "Грешка",
-"Update" => "Обновяване",
"Updated" => "Обновено",
"Uninstalling ...." => "Премахване ...",
"Error while uninstalling app" => "Грешка при премахването на приложението.",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Очаква се валидно име на група",
"deleted {groupName}" => "{groupName} изтрит",
"undo" => "възтановяване",
-"Group Admin" => "Админ Група",
+"no group" => "няма група",
"never" => "никога",
"deleted {userName}" => "{userName} изтрит",
"add group" => "нова група",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Валидна парола трябва да бъде зададена.",
"Warning: Home directory for user \"{user}\" already exists" => "Предупреждение: Личната директория на потребителя \"{user}\" вече съществува.",
"__language_name__" => "__language_name__",
+"Personal Info" => "Лична Информация",
+"SSL root certificates" => "SSL root сертификати",
+"Encryption" => "Криптиране",
"Everything (fatal issues, errors, warnings, info, debug)" => "Всичко (фатални проблеми, грешки, предупреждения, информация, дебъгване)",
"Info, warnings, errors and fatal issues" => "Информация, предупреждения, грешки и фатални проблеми",
"Warnings, errors and fatal issues" => "Предупреждения, грешки и фатални проблеми",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Моля свържи се с твоя %s през HTTPS, за да включиш или изключиш SSL задължаването.",
"Email Server" => "Имейл Сървър",
"This is used for sending out notifications." => "Това се използва за изпращане на уведомления.",
+"Send mode" => "Режим на изпращане",
"From address" => "От адрес",
"mail" => "поща",
+"Authentication method" => "Метод за отризиране",
"Authentication required" => "Нужна е идентификация",
"Server address" => "Адрес на сървъра",
"Port" => "Порт",
"Credentials" => "Потр. име и парола",
"SMTP Username" => "SMTP Потребителско Име",
"SMTP Password" => "SMTP Парола",
+"Store credentials" => "Запазвай креденциите",
"Test email settings" => "Настройки на проверяващия имейл",
"Send email" => "Изпрати имейл",
"Log" => "Доклад",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "По-малко",
"Version" => "Версия",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Разработен от <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud обществото</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">кодът</a> е лицензиран под <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Дабави свое Приложение",
-"More Apps" => "Още Приложения",
-"Select an App" => "Избери Приложение",
+"More apps" => "Още приложения",
+"Add your app" => "Добавете Ваше приложение",
+"by" => "от",
+"licensed" => "лицензирано",
"Documentation:" => "Документация:",
-"See application page at apps.owncloud.com" => "Виж страницата на приложението на apps.owncloud.com.",
-"See application website" => "Виж страницата на приложението",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-лицензиран от<span class=\"author\"></span>",
+"User Documentation" => "Потребителска Документация",
+"Admin Documentation" => "Админ Документация",
+"Update to %s" => "Обнови до %s",
"Enable only for specific groups" => "Включи само за определени групи",
+"Uninstall App" => "Премахни Приложението",
"Administrator Documentation" => "Административна Документация",
"Online Documentation" => "Документация в Интернет",
"Forum" => "Форум",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Избери като аватар",
"Language" => "Език",
"Help translate" => "Помогни с превода",
-"SSL root certificates" => "SSL root сертификати",
"Common Name" => "Познато Име",
"Valid until" => "Валиден до",
"Issued By" => "Издаден От",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Неограничено",
"Other" => "Друга...",
"Username" => "Потребителско Име",
+"Group Admin for" => "Групов администратор за",
"Quota" => "Квота",
"Storage Location" => "Място за Запис",
"Last Login" => "Последно Вписване",
diff --git a/settings/l10n/bn_BD.php b/settings/l10n/bn_BD.php
index 58b2a245e32..58839489eab 100644
--- a/settings/l10n/bn_BD.php
+++ b/settings/l10n/bn_BD.php
@@ -1,13 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "%s এর জন্য অবৈধ ভ্যাল্যু প্রদান করা হয়েছৈ",
-"Saved" => "সংরক্ষণ করা হলো",
-"test email settings" => "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
-"If you received this email, the settings seem to be correct." => "এই ইমেইলের অর্থ নিয়ামকসমূহ সঠিক।",
-"Email sent" => "ই-মেইল পাঠানো হয়েছে",
-"Send mode" => "পাঠানো মোড",
-"Encryption" => "সংকেতায়ন",
-"Unable to load list from App Store" => "অ্যাপস্টোর থেকে তালিকা লোড করতে সক্ষম নয়",
+"Enabled" => "কার্যকর",
"Authentication error" => "অনুমোদন ঘটিত সমস্যা",
"Your full name has been changed." => "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।",
"Group already exists" => "গোষ্ঠীটি পূর্ব থেকেই বিদ্যমান",
@@ -28,25 +21,27 @@ $TRANSLATIONS = array(
"Couldn't update app." => "অ্যাপ নবায়ন করা গেলনা।",
"Wrong password" => "ভুল কুটশব্দ",
"No user supplied" => "ব্যবহারকারী দেয়া হয়নি",
+"Saved" => "সংরক্ষণ করা হলো",
+"test email settings" => "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন",
+"If you received this email, the settings seem to be correct." => "এই ইমেইলের অর্থ নিয়ামকসমূহ সঠিক।",
+"Email sent" => "ই-মেইল পাঠানো হয়েছে",
"All" => "সবাই",
-"User Documentation" => "ব্যবহারকারী সহায়িকা",
+"Error while disabling app" => "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Disable" => "নিষ্ক্রিয়",
"Enable" => "সক্রিয় ",
-"Error while disabling app" => "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Error while enabling app" => "অ্যাপ কার্যকর করতে সমস্যা দেখা দিয়েছে ",
"Updating...." => "নবায়ন করা হচ্ছে....",
"Error while updating app" => "অ্যাপ নবায়ন করতে সমস্যা দেখা দিয়েছে ",
-"Error" => "সমস্যা",
-"Update" => "পরিবর্ধন",
"Updated" => "নবায়নকৃত",
"Strong password" => "শক্তিশালী কুটশব্দ",
"Valid until {date}" => "বৈধতা বলবৎ আছে {তারিখ} অবধি ",
"Delete" => "মুছে",
"Groups" => "গোষ্ঠীসমূহ",
"undo" => "ক্রিয়া প্রত্যাহার",
-"Group Admin" => "গোষ্ঠী প্রশাসক",
"never" => "কখনোই নয়",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL রুট সনদপত্র",
+"Encryption" => "সংকেতায়ন",
"None" => "কোনটিই নয়",
"Login" => "প্রবেশ",
"Security Warning" => "নিরাপত্তাজনিত সতর্কতা",
@@ -59,6 +54,7 @@ $TRANSLATIONS = array(
"Enforce expiration date" => "মেয়াদোত্তীর্ণ হওয়ার তারিখ কার্যকর করুন",
"Security" => "নিরাপত্তা",
"Email Server" => "ইমেইল সার্ভার",
+"Send mode" => "পাঠানো মোড",
"From address" => "হইতে ঠিকানা",
"mail" => "মেইল",
"Server address" => "সার্ভার ঠিকানা",
@@ -68,11 +64,8 @@ $TRANSLATIONS = array(
"Less" => "কম",
"Version" => "ভার্সন",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "তৈলী করেছেন <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud সম্প্রদায়</a>, যার <a href=\"https://github.com/owncloud\" target=\"_blank\"> উৎস কোডটি <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> এর অধীনে লাইসেন্সকৃত।",
-"Add your App" => "আপনার অ্যাপটি যোগ করুন",
-"More Apps" => "আরও অ্যাপ",
-"Select an App" => "অ্যাপ নির্বাচন করুন",
-"See application page at apps.owncloud.com" => "apps.owncloud.com এ অ্যাপ্লিকেসন পৃষ্ঠা দেখুন",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-লাইসেন্সধারী <span class=\"author\"></span>",
+"by" => "কর্তৃক",
+"User Documentation" => "ব্যবহারকারী সহায়িকা",
"Administrator Documentation" => "প্রশাসক সহায়িকা",
"Online Documentation" => "অনলাইন সহায়িকা",
"Forum" => "ফোরাম",
@@ -92,7 +85,6 @@ $TRANSLATIONS = array(
"Cancel" => "বাতির",
"Language" => "ভাষা",
"Help translate" => "অনুবাদ করতে সহায়তা করুন",
-"SSL root certificates" => "SSL রুট সনদপত্র",
"Import Root Certificate" => "রুট সনদপত্রটি আমদানি করুন",
"Login Name" => "প্রবেশ",
"Create" => "তৈরী কর",
diff --git a/settings/l10n/bn_IN.php b/settings/l10n/bn_IN.php
index 9e3ce7f906b..160df13779d 100644
--- a/settings/l10n/bn_IN.php
+++ b/settings/l10n/bn_IN.php
@@ -1,8 +1,8 @@
<?php
$TRANSLATIONS = array(
"Saved" => "সংরক্ষিত",
-"Error" => "ভুল",
"Delete" => "মুছে ফেলা",
+"by" => "দ্বারা",
"Get the apps to sync your files" => "আপনার ফাইল সিঙ্ক করার অ্যাপ পান",
"Cancel" => "বাতিল করা",
"Username" => "ইউজারনেম"
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 8a488402b48..19fb76d29a2 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "El valor proporcionat no és vàlid per %s",
-"Saved" => "Desat",
-"test email settings" => "prova l'arranjament del correu",
-"If you received this email, the settings seem to be correct." => "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Hi ha hagut un problema en enviar el correu. Comproveu-ne l'arranjament.",
-"Email sent" => "El correu electrónic s'ha enviat",
-"You need to set your user email before being able to send test emails." => "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
-"Send mode" => "Mode d'enviament",
-"Encryption" => "Xifrat",
-"Authentication method" => "Mètode d'autenticació",
-"Unable to load list from App Store" => "No s'ha pogut carregar la llista des de l'App Store",
+"Enabled" => "Activat",
"Authentication error" => "Error d'autenticació",
"Your full name has been changed." => "El vostre nom complet ha canviat.",
"Unable to change full name" => "No s'ha pogut canviar el nom complet",
@@ -40,21 +30,20 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "La contrasenya de recuperació d'administrador és incorrecta. Comproveu-la i torneu-ho a intentar.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "El dorsal no permet canviar la contrasenya, però la clau d'encripació d'usuaris s'ha actualitzat correctament.",
"Unable to change password" => "No es pot canviar la contrasenya",
+"Saved" => "Desat",
+"test email settings" => "prova l'arranjament del correu",
+"If you received this email, the settings seem to be correct." => "Si rebeu aquest correu sembla que l'arranjament del correu és correcte.",
+"Email sent" => "El correu electrónic s'ha enviat",
+"You need to set your user email before being able to send test emails." => "Heu d'establir un nom d'usuari abans de poder enviar correus de prova.",
"Sending..." => "Enviant...",
"All" => "Tots",
-"User Documentation" => "Documentació d'usuari",
-"Admin Documentation" => "Documentació d'administrador",
-"Update to {appversion}" => "Actualitza a {appversion}",
-"Uninstall App" => "Desinstal·la l'aplicació",
-"Disable" => "Desactiva",
-"Enable" => "Habilita",
"Please wait...." => "Espereu...",
"Error while disabling app" => "Error en desactivar l'aplicació",
+"Disable" => "Desactiva",
+"Enable" => "Habilita",
"Error while enabling app" => "Error en activar l'aplicació",
"Updating...." => "Actualitzant...",
"Error while updating app" => "Error en actualitzar l'aplicació",
-"Error" => "Error",
-"Update" => "Actualitza",
"Updated" => "Actualitzada",
"Uninstalling ...." => "Desintal·lant ...",
"Error while uninstalling app" => "Error en desinstal·lar l'aplicació",
@@ -75,7 +64,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Heu de facilitar un nom de grup vàlid",
"deleted {groupName}" => "eliminat {groupName}",
"undo" => "desfés",
-"Group Admin" => "Grup Admin",
"never" => "mai",
"deleted {userName}" => "eliminat {userName}",
"add group" => "afegeix grup",
@@ -84,6 +72,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Heu de facilitar una contrasenya vàlida",
"Warning: Home directory for user \"{user}\" already exists" => "Avís: la carpeta Home per l'usuari \"{user}\" ja existeix",
"__language_name__" => "Català",
+"SSL root certificates" => "Certificats SSL root",
+"Encryption" => "Xifrat",
"Everything (fatal issues, errors, warnings, info, debug)" => "Tot (problemes fatals, errors, avisos, informació, depuració)",
"Info, warnings, errors and fatal issues" => "Informació, avisos, errors i problemes fatals",
"Warnings, errors and fatal issues" => "Avisos, errors i problemes fatals",
@@ -138,8 +128,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Connecteu a %s a través de HTTPS per habilitar o inhabilitar l'accés SSL.",
"Email Server" => "Servidor de correu",
"This is used for sending out notifications." => "S'usa per enviar notificacions.",
+"Send mode" => "Mode d'enviament",
"From address" => "Des de l'adreça",
"mail" => "correu electrònic",
+"Authentication method" => "Mètode d'autenticació",
"Authentication required" => "Es requereix autenticació",
"Server address" => "Adreça del servidor",
"Port" => "Port",
@@ -154,14 +146,13 @@ $TRANSLATIONS = array(
"Less" => "Menys",
"Version" => "Versió",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolupat per la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunitat ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">codi font</a> té llicència <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Afegiu la vostra aplicació",
-"More Apps" => "Més aplicacions",
-"Select an App" => "Seleccioneu una aplicació",
+"More apps" => "Més aplicacions",
+"by" => "per",
"Documentation:" => "Documentació:",
-"See application page at apps.owncloud.com" => "Mireu la pàgina d'aplicacions a apps.owncloud.com",
-"See application website" => "Mostra la web de l'aplicació",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-propietat de <span class=\"author\"></span>",
+"User Documentation" => "Documentació d'usuari",
+"Admin Documentation" => "Documentació d'administrador",
"Enable only for specific groups" => "Activa només per grups específics",
+"Uninstall App" => "Desinstal·la l'aplicació",
"Administrator Documentation" => "Documentació d'administrador",
"Online Documentation" => "Documentació en línia",
"Forum" => "Fòrum",
@@ -191,7 +182,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Selecciona com a imatge de perfil",
"Language" => "Idioma",
"Help translate" => "Ajudeu-nos amb la traducció",
-"SSL root certificates" => "Certificats SSL root",
"Import Root Certificate" => "Importa certificat root",
"The encryption app is no longer enabled, please decrypt all your files" => "L'aplicació d'encriptació ja no està activada, desencripteu tots els vostres fitxers",
"Log-in password" => "Contrasenya d'accés",
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index dbbabb4a10f..0b003082c50 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Uvedena nesprávná hodnota pro %s",
-"Saved" => "Uloženo",
-"test email settings" => "otestovat nastavení e-mailu",
-"If you received this email, the settings seem to be correct." => "Pokud jste obdrželi tento e-mail, nastavení se zdají být v pořádku.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Při odesílání e-mailu nastala chyba. Překontrolujte vaše nastavení.",
-"Email sent" => "E-mail odeslán",
-"You need to set your user email before being able to send test emails." => "Pro možnost odeslání zkušebních e-mailů musíte nejprve nastavit svou e-mailovou adresu.",
-"Send mode" => "Mód odesílání",
-"Encryption" => "Šifrování",
-"Authentication method" => "Metoda ověření",
-"Unable to load list from App Store" => "Nelze načíst seznam z App Store",
+"Enabled" => "Povoleno",
+"Not enabled" => "Vypnuto",
+"Recommended" => "Doporučeno",
"Authentication error" => "Chyba přihlášení",
"Your full name has been changed." => "Vaše celé jméno bylo změněno.",
"Unable to change full name" => "Nelze změnit celé jméno",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Chybné administrátorské heslo pro obnovu. Překontrolujte správnost hesla a zkuste to znovu.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Úložiště nepodporuje změnu hesla, ale šifrovací klíč uživatelů byl úspěšně změněn.",
"Unable to change password" => "Změna hesla se nezdařila",
+"Saved" => "Uloženo",
+"test email settings" => "otestovat nastavení e-mailu",
+"If you received this email, the settings seem to be correct." => "Pokud jste obdrželi tento e-mail, nastavení se zdají být v pořádku.",
+"A problem occurred while sending the email. Please revise your settings." => "Při odesílání e-mailu nastala chyba. Překontrolujte prosím svá nastavení.",
+"Email sent" => "E-mail odeslán",
+"You need to set your user email before being able to send test emails." => "Pro možnost odeslání zkušebních e-mailů musíte nejprve nastavit svou e-mailovou adresu.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?",
"Add trusted domain" => "Přidat důvěryhodnou doménu",
"Sending..." => "Odesílání...",
"All" => "Vše",
-"User Documentation" => "Uživatelská dokumentace",
-"Admin Documentation" => "Dokumentace pro administrátory",
-"Update to {appversion}" => "Aktualizovat na {appversion}",
-"Uninstall App" => "Odinstalovat aplikaci",
-"Disable" => "Zakázat",
-"Enable" => "Povolit",
"Please wait...." => "Čekejte prosím...",
"Error while disabling app" => "Chyba při zakazování aplikace",
+"Disable" => "Zakázat",
+"Enable" => "Povolit",
"Error while enabling app" => "Chyba při povolování aplikace",
"Updating...." => "Aktualizuji...",
"Error while updating app" => "Chyba při aktualizaci aplikace",
-"Error" => "Chyba",
-"Update" => "Aktualizovat",
"Updated" => "Aktualizováno",
"Uninstalling ...." => "Probíhá odinstalace ...",
"Error while uninstalling app" => "Chyba při odinstalaci aplikace",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Musíte zadat platný název skupiny",
"deleted {groupName}" => "smazána {groupName}",
"undo" => "vrátit zpět",
-"Group Admin" => "Správa skupiny",
+"no group" => "není ve skupině",
"never" => "nikdy",
"deleted {userName}" => "smazán {userName}",
"add group" => "přidat skupinu",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Musíte zadat platné heslo",
"Warning: Home directory for user \"{user}\" already exists" => "Varování: Osobní složka uživatele \"{user}\" již existuje.",
"__language_name__" => "Česky",
+"Personal Info" => "Osobní informace",
+"SSL root certificates" => "Kořenové certifikáty SSL",
+"Encryption" => "Šifrování",
"Everything (fatal issues, errors, warnings, info, debug)" => "Vše (fatální problémy, chyby, varování, informační, ladící)",
"Info, warnings, errors and fatal issues" => "Informace, varování, chyby a fatální problémy",
"Warnings, errors and fatal issues" => "Varování, chyby a fatální problémy",
@@ -145,17 +140,20 @@ $TRANSLATIONS = array(
"Security" => "Zabezpečení",
"Enforce HTTPS" => "Vynutit HTTPS",
"Forces the clients to connect to %s via an encrypted connection." => "Vynutí připojování klientů k %s šifrovaným spojením.",
-"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Připojte se k %s skrze HTTPS pro povolení nebo zakázání vynucování SSL.",
+"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Připojte se k %s přes HTTPS pro povolení nebo zakázání vynucení SSL.",
"Email Server" => "E-mailový server",
"This is used for sending out notifications." => "Toto se používá pro odesílání upozornění.",
+"Send mode" => "Mód odesílání",
"From address" => "Adresa odesílatele",
"mail" => "e-mail",
+"Authentication method" => "Metoda ověření",
"Authentication required" => "Vyžadováno ověření",
"Server address" => "Adresa serveru",
"Port" => "Port",
"Credentials" => "Přihlašovací údaje",
"SMTP Username" => "SMTP uživatelské jméno ",
"SMTP Password" => "SMTP heslo",
+"Store credentials" => "Ukládat přihlašovací údaje",
"Test email settings" => "Otestovat nastavení e-mailu",
"Send email" => "Odeslat e-mail",
"Log" => "Záznam",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Méně",
"Version" => "Verze",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Vyvinuto <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komunitou ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">zdrojový kód</a> je licencován pod <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Přidat Vaši aplikaci",
-"More Apps" => "Více aplikací",
-"Select an App" => "Vyberte aplikaci",
+"More apps" => "Více aplikací",
+"Add your app" => "Přidat vlastní aplikaci",
+"by" => "sdílí",
+"licensed" => "licencováno",
"Documentation:" => "Dokumentace:",
-"See application page at apps.owncloud.com" => "Více na stránce s aplikacemi na apps.owncloud.com",
-"See application website" => "Prohlédněte si webovou stránku aplikace",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencováno <span class=\"author\"></span>",
+"User Documentation" => "Uživatelská dokumentace",
+"Admin Documentation" => "Dokumentace pro administrátory",
+"Update to %s" => "Aktualizovat na %s",
"Enable only for specific groups" => "Povolit pouze pro vybrané skupiny",
+"Uninstall App" => "Odinstalovat aplikaci",
"Administrator Documentation" => "Dokumentace správce",
"Online Documentation" => "Online dokumentace",
"Forum" => "Fórum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Vybrat jako profilový obrázek",
"Language" => "Jazyk",
"Help translate" => "Pomoci s překladem",
-"SSL root certificates" => "Kořenové certifikáty SSL",
"Common Name" => "Common Name",
"Valid until" => "Platný do",
"Issued By" => "Vydal",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Neomezeně",
"Other" => "Jiný",
"Username" => "Uživatelské jméno",
+"Group Admin for" => "Administrátor skupiny ",
"Quota" => "Kvóta",
"Storage Location" => "Umístění úložiště",
"Last Login" => "Poslední přihlášení",
diff --git a/settings/l10n/cy_GB.php b/settings/l10n/cy_GB.php
index 4fcfa2cfc72..22f740c86b7 100644
--- a/settings/l10n/cy_GB.php
+++ b/settings/l10n/cy_GB.php
@@ -1,18 +1,18 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Anfonwyd yr e-bost",
-"Encryption" => "Amgryptiad",
"Authentication error" => "Gwall dilysu",
"Invalid request" => "Cais annilys",
-"Error" => "Gwall",
+"Email sent" => "Anfonwyd yr e-bost",
"Delete" => "Dileu",
"Groups" => "Grwpiau",
"undo" => "dadwneud",
"never" => "byth",
+"Encryption" => "Amgryptiad",
"None" => "Dim",
"Login" => "Mewngofnodi",
"Security Warning" => "Rhybudd Diogelwch",
"Please double check the <a href='%s'>installation guides</a>." => "Gwiriwch y <a href='%s'>canllawiau gosod</a> eto.",
+"by" => "gan",
"Password" => "Cyfrinair",
"New password" => "Cyfrinair newydd",
"Email" => "E-bost",
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index bfb599bb09c..814f809e10e 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Ugyldig værdi anført for %s",
-"Saved" => "Gemt",
-"test email settings" => "test e-mailindstillinger",
-"If you received this email, the settings seem to be correct." => "Hvis du har modtaget denne e-mail, så lader indstillinger til at være korrekte.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Der opstod et problem under afsendelse af e-mailen. Gennemse venligst dine indstillinger påny.",
-"Email sent" => "E-mail afsendt",
-"You need to set your user email before being able to send test emails." => "Du skal angive din bruger-e-mail før der kan sendes test-e-mail.",
-"Send mode" => "Tilstand for afsendelse",
-"Encryption" => "Kryptering",
-"Authentication method" => "Godkendelsesmetode",
-"Unable to load list from App Store" => "Kunne ikke indlæse listen fra App Store",
+"Enabled" => "Aktiveret",
+"Not enabled" => "Slået fra",
+"Recommended" => "Anbefalet",
"Authentication error" => "Adgangsfejl",
"Your full name has been changed." => "Dit fulde navn er blevet ændret.",
"Unable to change full name" => "Ikke i stand til at ændre dit fulde navn",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Forkert admin gendannelseskode. Se venligst koden efter og prøv igen.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Serveren understøtter ikke kodeordsskifte, men brugernes krypteringsnøgle blev opdateret.",
"Unable to change password" => "Kunne ikke ændre kodeord",
+"Saved" => "Gemt",
+"test email settings" => "test e-mailindstillinger",
+"If you received this email, the settings seem to be correct." => "Hvis du har modtaget denne e-mail, så lader indstillinger til at være korrekte.",
+"A problem occurred while sending the email. Please revise your settings." => "Der opstod en fejl under afsendelse af e-mailen. Gennemse venligst dine indstillinger.",
+"Email sent" => "E-mail afsendt",
+"You need to set your user email before being able to send test emails." => "Du skal angive din bruger-e-mail før der kan sendes test-e-mail.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?",
"Add trusted domain" => "Tilføj et domæne som du har tillid til",
"Sending..." => "Sender...",
"All" => "Alle",
-"User Documentation" => "Brugerdokumentation",
-"Admin Documentation" => "Administrator Dokumentation",
-"Update to {appversion}" => "Opdatér til {appversion}",
-"Uninstall App" => "Afinstallér app",
-"Disable" => "Deaktiver",
-"Enable" => "Aktiver",
"Please wait...." => "Vent venligst...",
"Error while disabling app" => "Kunne ikke deaktivere app",
+"Disable" => "Deaktiver",
+"Enable" => "Aktiver",
"Error while enabling app" => "Kunne ikke aktivere app",
"Updating...." => "Opdaterer....",
"Error while updating app" => "Der opstod en fejl under app opgraderingen",
-"Error" => "Fejl",
-"Update" => "Opdater",
"Updated" => "Opdateret",
"Uninstalling ...." => "Afinstallerer...",
"Error while uninstalling app" => "Fejl under afinstallering af app",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Et gyldigt gruppenavn skal angives ",
"deleted {groupName}" => "slettede {groupName}",
"undo" => "fortryd",
-"Group Admin" => "Gruppe Administrator",
+"no group" => "ingen gruppe",
"never" => "aldrig",
"deleted {userName}" => "slettede {userName}",
"add group" => "Tilføj gruppe",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "En gyldig adgangskode skal angives",
"Warning: Home directory for user \"{user}\" already exists" => "Advarsel: Hjemmemappen for bruger \"{user}\" findes allerede",
"__language_name__" => "Dansk",
+"Personal Info" => "Personlige oplysninger",
+"SSL root certificates" => "SSL-rodcertifikater",
+"Encryption" => "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" => "Alt (alvorlige fejl, fejl, advarsler, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, advarsler, fejl og alvorlige fejl",
"Warnings, errors and fatal issues" => "Advarsler, fejl og alvorlige fejl",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Forbind venligst til din %s via HTTPS for at aktivere eller deaktivere SSL tvang.",
"Email Server" => "E-mailserver",
"This is used for sending out notifications." => "Dette anvendes til udsendelse af notifikationer.",
+"Send mode" => "Tilstand for afsendelse",
"From address" => "Fra adresse",
"mail" => "mail",
+"Authentication method" => "Godkendelsesmetode",
"Authentication required" => "Godkendelse påkrævet",
"Server address" => "Serveradresse",
"Port" => "Port",
"Credentials" => "Brugeroplysninger",
"SMTP Username" => "SMTP Brugernavn",
"SMTP Password" => "SMTP Kodeord",
+"Store credentials" => "Gem brugeroplysninger",
"Test email settings" => "Test e-mail-indstillinger",
"Send email" => "Send e-mail",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Mindre",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Udviklet af <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownClouds community</a>, og <a href=\"https://github.com/owncloud\" target=\"_blank\">kildekoden</a> er underlagt licensen <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Tilføj din App",
-"More Apps" => "Flere Apps",
-"Select an App" => "Vælg en App",
+"More apps" => "Flere programmer",
+"Add your app" => "Tilføj din app",
+"by" => "af",
+"licensed" => "licenseret",
"Documentation:" => "Dokumentation:",
-"See application page at apps.owncloud.com" => "Se applikationens side på apps.owncloud.com",
-"See application website" => "Se programmets websted",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenseret af <span class=\"author\"></span>",
+"User Documentation" => "Brugerdokumentation",
+"Admin Documentation" => "Administrator Dokumentation",
+"Update to %s" => "Opdatér til %s",
"Enable only for specific groups" => "Aktivér kun for udvalgte grupper",
+"Uninstall App" => "Afinstallér app",
"Administrator Documentation" => "Administrator Dokumentation",
"Online Documentation" => "Online dokumentation",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Vælg som profilbillede",
"Language" => "Sprog",
"Help translate" => "Hjælp med oversættelsen",
-"SSL root certificates" => "SSL-rodcertifikater",
"Common Name" => "Almindeligt navn",
"Valid until" => "Gyldig indtil",
"Issued By" => "Udstedt af",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Ubegrænset",
"Other" => "Andet",
"Username" => "Brugernavn",
+"Group Admin for" => "Gruppeadministrator for",
"Quota" => "Kvote",
"Storage Location" => "Placering af lageret",
"Last Login" => "Seneste login",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index a6ce83fc552..19d18f82061 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Ungültiger Wert für %s übermittelt",
-"Saved" => "Gespeichert",
-"test email settings" => "E-Mail-Einstellungen testen",
-"If you received this email, the settings seem to be correct." => "Wenn Sie diese E-Mail erhalten haben, sind die Einstellungen korrekt.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfe deine Einstellungen",
-"Email sent" => "E-Mail wurde verschickt",
-"You need to set your user email before being able to send test emails." => "Du musst zunächst deine Benutzer-E-Mail-Adresse setzen, bevor du Test-E-Mail verschicken kannst.",
-"Send mode" => "Sende-Modus",
-"Encryption" => "Verschlüsselung",
-"Authentication method" => "Authentifizierungsmethode",
-"Unable to load list from App Store" => "Die Liste der Anwendungen im Store konnte nicht geladen werden.",
+"Enabled" => "Aktiviert",
+"Not enabled" => "Nicht aktiviert",
+"Recommended" => "Empfohlen",
"Authentication error" => "Fehler bei der Anmeldung",
"Your full name has been changed." => "Dein vollständiger Name ist geändert worden.",
"Unable to change full name" => "Der vollständige Name konnte nicht geändert werden",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Das Back-End unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.",
"Unable to change password" => "Passwort konnte nicht geändert werden",
+"Saved" => "Gespeichert",
+"test email settings" => "E-Mail-Einstellungen testen",
+"If you received this email, the settings seem to be correct." => "Wenn Sie diese E-Mail erhalten haben, sind die Einstellungen korrekt.",
+"A problem occurred while sending the email. Please revise your settings." => "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfe deine Einstellungen.",
+"Email sent" => "E-Mail wurde verschickt",
+"You need to set your user email before being able to send test emails." => "Du musst zunächst deine Benutzer-E-Mail-Adresse setzen, bevor du Test-E-Mail verschicken kannst.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Bist Du dir wirklich sicher, dass Du \"{domain}\" als vertrauenswürdige Domain hinzufügen möchtest?",
"Add trusted domain" => "Vertrauenswürdige Domain hinzufügen",
"Sending..." => "Sende...",
"All" => "Alle",
-"User Documentation" => "Dokumentation für Benutzer",
-"Admin Documentation" => "Admin-Dokumentation",
-"Update to {appversion}" => "Aktualisiere zu {appversion}",
-"Uninstall App" => "App deinstallieren",
-"Disable" => "Deaktivieren",
-"Enable" => "Aktivieren",
"Please wait...." => "Bitte warten...",
"Error while disabling app" => "Beim Deaktivieren der Applikation ist ein Fehler aufgetreten",
+"Disable" => "Deaktivieren",
+"Enable" => "Aktivieren",
"Error while enabling app" => "Beim Aktivieren der Applikation ist ein Fehler aufgetreten",
"Updating...." => "Aktualisierung...",
"Error while updating app" => "Fehler beim Aktualisieren der App",
-"Error" => "Fehler",
-"Update" => "Aktualisierung durchführen",
"Updated" => "Aktualisiert",
"Uninstalling ...." => "Deinstalliere ....",
"Error while uninstalling app" => "Fehler beim Deinstallieren der App",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Ein gültiger Gruppenname muss angegeben werden",
"deleted {groupName}" => "{groupName} gelöscht",
"undo" => "rückgängig machen",
-"Group Admin" => "Gruppenadministrator",
+"no group" => "Keine Gruppe",
"never" => "niemals",
"deleted {userName}" => "{userName} gelöscht",
"add group" => "Gruppe hinzufügen",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Es muss ein gültiges Passwort angegeben werden",
"Warning: Home directory for user \"{user}\" already exists" => "Warnung: Das Benutzerverzeichnis für den Benutzer \"{user}\" existiert bereits",
"__language_name__" => "Deutsch (Persönlich)",
+"Personal Info" => "Persönliche Informationen",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Encryption" => "Verschlüsselung",
"Everything (fatal issues, errors, warnings, info, debug)" => "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)",
"Info, warnings, errors and fatal issues" => "Infos, Warnungen, Fehler und fatale Probleme",
"Warnings, errors and fatal issues" => "Warnungen, Fehler und fatale Probleme",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Bitte verbinde dich zu deinem %s über HTTPS um die SSL-Erzwingung zu aktivieren oder zu deaktivieren.",
"Email Server" => "E-Mail-Server",
"This is used for sending out notifications." => "Dies wird zum Senden von Benachrichtigungen verwendet.",
+"Send mode" => "Sende-Modus",
"From address" => "Absender-Adresse",
"mail" => "Mail",
+"Authentication method" => "Authentifizierungsmethode",
"Authentication required" => "Authentifizierung benötigt",
"Server address" => "Adresse des Servers",
"Port" => "Port",
"Credentials" => "Zugangsdaten",
"SMTP Username" => "SMTP Benutzername",
"SMTP Password" => "SMTP Passwort",
+"Store credentials" => "Anmeldeinformationen speichern",
"Test email settings" => "Teste E-Mail-Einstellungen",
"Send email" => "Sende E-Mail",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Weniger",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Entwickelt von der <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-Community</a>, der <a href=\"https://github.com/owncloud\" target=\"_blank\">Quellcode</a> ist unter der <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> lizenziert.",
-"Add your App" => "Füge Deine Anwendung hinzu",
-"More Apps" => "Weitere Anwendungen",
-"Select an App" => "Wähle eine Anwendung aus",
+"More apps" => "Mehr Apps",
+"Add your app" => "Fügen Sie Ihre App hinzu",
+"by" => "von",
+"licensed" => "Lizenziert",
"Documentation:" => "Dokumentation:",
-"See application page at apps.owncloud.com" => "Weitere Anwendungen findest Du auf apps.owncloud.com",
-"See application website" => "Siehe Anwendungs-Website",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lizenziert von <span class=\"author\"></span>",
+"User Documentation" => "Dokumentation für Benutzer",
+"Admin Documentation" => "Admin-Dokumentation",
+"Update to %s" => "Aktualisierung auf %s",
"Enable only for specific groups" => "Nur für spezifizierte Gruppen aktivieren",
+"Uninstall App" => "App deinstallieren",
"Administrator Documentation" => "Dokumentation für Administratoren",
"Online Documentation" => "Online-Dokumentation",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Als Profilbild wählen",
"Language" => "Sprache",
"Help translate" => "Hilf bei der Übersetzung",
-"SSL root certificates" => "SSL-Root-Zertifikate",
"Common Name" => "Zuname",
"Valid until" => "Gültig bis",
"Issued By" => "Ausgestellt von:",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Unbegrenzt",
"Other" => "Andere",
"Username" => "Benutzername",
+"Group Admin for" => "Gruppenadministrator für",
"Quota" => "Quota",
"Storage Location" => "Speicherort",
"Last Login" => "Letzte Anmeldung",
diff --git a/settings/l10n/de_AT.php b/settings/l10n/de_AT.php
index 34177f8053c..f82d87ef739 100644
--- a/settings/l10n/de_AT.php
+++ b/settings/l10n/de_AT.php
@@ -1,12 +1,13 @@
<?php
$TRANSLATIONS = array(
"Invalid request" => "Fehlerhafte Anfrage",
-"Error" => "Fehler",
"Delete" => "Löschen",
"never" => "niemals",
"__language_name__" => "Deutsch (Österreich)",
"Server address" => "Adresse des Servers",
"Port" => "Port",
+"More apps" => "Mehr Apps",
+"by" => "von",
"Password" => "Passwort",
"Email" => "E-Mail",
"Cancel" => "Abbrechen",
diff --git a/settings/l10n/de_CH.php b/settings/l10n/de_CH.php
index 154a3799f7e..08ff1847dd8 100644
--- a/settings/l10n/de_CH.php
+++ b/settings/l10n/de_CH.php
@@ -1,9 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "Gespeichert",
-"Email sent" => "Email gesendet",
-"Encryption" => "Verschlüsselung",
-"Unable to load list from App Store" => "Die Liste der Anwendungen im Store konnte nicht geladen werden.",
+"Enabled" => "Aktiviert",
"Authentication error" => "Authentifizierungs-Fehler",
"Group already exists" => "Die Gruppe existiert bereits",
"Unable to add group" => "Die Gruppe konnte nicht angelegt werden",
@@ -17,30 +14,29 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden",
"Unable to remove user from group %s" => "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden",
"Couldn't update app." => "Die App konnte nicht aktualisiert werden.",
+"Saved" => "Gespeichert",
+"Email sent" => "Email gesendet",
"All" => "Alle",
-"User Documentation" => "Dokumentation für Benutzer",
-"Update to {appversion}" => "Update zu {appversion}",
-"Disable" => "Deaktivieren",
-"Enable" => "Aktivieren",
"Please wait...." => "Bitte warten....",
"Error while disabling app" => "Fehler während der Deaktivierung der Anwendung",
+"Disable" => "Deaktivieren",
+"Enable" => "Aktivieren",
"Error while enabling app" => "Fehler während der Aktivierung der Anwendung",
"Updating...." => "Update...",
"Error while updating app" => "Es ist ein Fehler während des Updates aufgetreten",
-"Error" => "Fehler",
-"Update" => "Update durchführen",
"Updated" => "Aktualisiert",
"Delete" => "Löschen",
"Decrypting files... Please wait, this can take some time." => "Entschlüssel Dateien ... Bitte warten Sie, denn dieser Vorgang kann einige Zeit beanspruchen.",
"Groups" => "Gruppen",
"undo" => "rückgängig machen",
-"Group Admin" => "Gruppenadministrator",
"never" => "niemals",
"add group" => "Gruppe hinzufügen",
"A valid username must be provided" => "Es muss ein gültiger Benutzername angegeben werden",
"Error creating user" => "Beim Erstellen des Benutzers ist ein Fehler aufgetreten",
"A valid password must be provided" => "Es muss ein gültiges Passwort angegeben werden",
"__language_name__" => "Deutsch (Schweiz)",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Encryption" => "Verschlüsselung",
"Login" => "Anmelden",
"Security Warning" => "Sicherheitshinweis",
"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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ihr Datenverzeichnis und Ihre Dateien sind möglicher Weise aus dem Internet erreichbar. Die .htaccess-Datei funktioniert nicht. Wir raten Ihnen dringend, dass Sie Ihren Webserver dahingehend konfigurieren, dass Ihr Datenverzeichnis nicht länger aus dem Internet erreichbar ist, oder Sie verschieben das Datenverzeichnis ausserhalb des Wurzelverzeichnisses des Webservers.",
@@ -67,11 +63,9 @@ $TRANSLATIONS = array(
"Less" => "Weniger",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Entwickelt von der <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-Community</a>. Der <a href=\"https://github.com/owncloud\" target=\"_blank\">Quellcode</a> ist unter der <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> lizenziert.",
-"Add your App" => "Fügen Sie Ihre Anwendung hinzu",
-"More Apps" => "Weitere Anwendungen",
-"Select an App" => "Wählen Sie eine Anwendung aus",
-"See application page at apps.owncloud.com" => "Weitere Anwendungen finden Sie auf apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lizenziert von <span class=\"author\"></span>",
+"More apps" => "Mehr Apps",
+"by" => "von",
+"User Documentation" => "Dokumentation für Benutzer",
"Administrator Documentation" => "Dokumentation für Administratoren",
"Online Documentation" => "Online-Dokumentation",
"Forum" => "Forum",
@@ -91,7 +85,6 @@ $TRANSLATIONS = array(
"Cancel" => "Abbrechen",
"Language" => "Sprache",
"Help translate" => "Helfen Sie bei der Übersetzung",
-"SSL root certificates" => "SSL-Root-Zertifikate",
"Import Root Certificate" => "Root-Zertifikate importieren",
"Log-in password" => "Login-Passwort",
"Decrypt all Files" => "Alle Dateien entschlüsseln",
diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php
index 9435dcf30a9..25328f377e3 100644
--- a/settings/l10n/de_DE.php
+++ b/settings/l10n/de_DE.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Ungültiger Wert für %s übermittelt",
-"Saved" => "Gespeichert",
-"test email settings" => "E-Mail-Einstellungen testen",
-"If you received this email, the settings seem to be correct." => "Wenn Sie diese E-Mail erhalten haben, scheinen die Einstellungen richtig zu sein.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfen Sie Ihre Einstellungen.",
-"Email sent" => "E-Mail gesendet",
-"You need to set your user email before being able to send test emails." => "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.",
-"Send mode" => "Sendemodus",
-"Encryption" => "Verschlüsselung",
-"Authentication method" => "Legitimierungsmethode",
-"Unable to load list from App Store" => "Die Liste der Anwendungen im Store konnte nicht geladen werden.",
+"Enabled" => "Aktiviert",
+"Not enabled" => "Nicht aktiviert",
+"Recommended" => "Empfohlen",
"Authentication error" => "Authentifizierungs-Fehler",
"Your full name has been changed." => "Ihr vollständiger Name ist geändert worden.",
"Unable to change full name" => "Der vollständige Name konnte nicht geändert werden",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Das Hintergrundprogramm unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.",
"Unable to change password" => "Passwort konnte nicht geändert werden",
+"Saved" => "Gespeichert",
+"test email settings" => "E-Mail-Einstellungen testen",
+"If you received this email, the settings seem to be correct." => "Wenn Sie diese E-Mail erhalten haben, scheinen die Einstellungen richtig zu sein.",
+"A problem occurred while sending the email. Please revise your settings." => "Ein Problem ist beim Senden der E-Mail aufgetreten. Bitte überprüfen Sie Ihre Einstellungen.",
+"Email sent" => "E-Mail gesendet",
+"You need to set your user email before being able to send test emails." => "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?",
"Add trusted domain" => "Vertrauenswürdige Domain hinzufügen",
"Sending..." => "Wird gesendet …",
"All" => "Alle",
-"User Documentation" => "Dokumentation für Benutzer",
-"Admin Documentation" => "Dokumentation für Administratoren",
-"Update to {appversion}" => "Update zu {appversion}",
-"Uninstall App" => "App deinstallieren",
-"Disable" => "Deaktivieren",
-"Enable" => "Aktivieren",
"Please wait...." => "Bitte warten....",
"Error while disabling app" => "Beim Deaktivieren der Applikation ist ein Fehler aufgetreten",
+"Disable" => "Deaktivieren",
+"Enable" => "Aktivieren",
"Error while enabling app" => "Beim Aktivieren der Applikation ist ein Fehler aufgetreten",
"Updating...." => "Update...",
"Error while updating app" => "Es ist ein Fehler während des Updates aufgetreten",
-"Error" => "Fehler",
-"Update" => "Update durchführen",
"Updated" => "Aktualisiert",
"Uninstalling ...." => "Wird deinstalliert …",
"Error while uninstalling app" => "Fehler beim Deinstallieren der App",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Ein gültiger Gruppenname muss angegeben werden",
"deleted {groupName}" => "{groupName} gelöscht",
"undo" => "rückgängig machen",
-"Group Admin" => "Gruppenadministrator",
+"no group" => "Keine Gruppe",
"never" => "niemals",
"deleted {userName}" => "{userName} gelöscht",
"add group" => "Gruppe hinzufügen",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Es muss ein gültiges Passwort angegeben werden",
"Warning: Home directory for user \"{user}\" already exists" => "Warnung: Das Benutzerverzeichnis für den Benutzer \"{user}\" existiert bereits",
"__language_name__" => "Deutsch (Förmlich: Sie)",
+"Personal Info" => "Persönliche Informationen",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Encryption" => "Verschlüsselung",
"Everything (fatal issues, errors, warnings, info, debug)" => "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)",
"Info, warnings, errors and fatal issues" => "Infos, Warnungen, Fehler und fatale Probleme",
"Warnings, errors and fatal issues" => "Warnungen, Fehler und fatale Probleme",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Bitte verbinden Sie sich zu Ihrem %s über HTTPS um die SSL-Erzwingung zu aktivieren oder zu deaktivieren.",
"Email Server" => "E-Mail-Server",
"This is used for sending out notifications." => "Dies wird für das Senden von Benachrichtigungen verwendet.",
+"Send mode" => "Sendemodus",
"From address" => "Absender-Adresse",
"mail" => "Mail",
+"Authentication method" => "Legitimierungsmethode",
"Authentication required" => "Authentifizierung benötigt",
"Server address" => "Adresse des Servers",
"Port" => "Port",
"Credentials" => "Zugangsdaten",
"SMTP Username" => "SMTP Benutzername",
"SMTP Password" => "SMTP Passwort",
+"Store credentials" => "Anmeldeinformationen speichern",
"Test email settings" => "E-Mail-Einstellungen testen",
"Send email" => "E-Mail senden",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Weniger",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Entwickelt von der <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-Community</a>. Der <a href=\"https://github.com/owncloud\" target=\"_blank\">Quellcode</a> ist unter der <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> lizenziert.",
-"Add your App" => "Fügen Sie Ihre Anwendung hinzu",
-"More Apps" => "Weitere Anwendungen",
-"Select an App" => "Wählen Sie eine Anwendung aus",
+"More apps" => "Mehr Apps",
+"Add your app" => "Füge Deine App hinzu",
+"by" => "von",
+"licensed" => "Lizenziert",
"Documentation:" => "Dokumentation:",
-"See application page at apps.owncloud.com" => "Weitere Anwendungen finden Sie auf apps.owncloud.com",
-"See application website" => "Siehe Anwendungs-Website",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lizenziert von <span class=\"author\"></span>",
+"User Documentation" => "Dokumentation für Benutzer",
+"Admin Documentation" => "Dokumentation für Administratoren",
+"Update to %s" => "Aktualisierung auf %s",
"Enable only for specific groups" => "Nur für bestimmte Gruppen aktivieren",
+"Uninstall App" => "App deinstallieren",
"Administrator Documentation" => "Dokumentation für Administratoren",
"Online Documentation" => "Online-Dokumentation",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Als Profilbild wählen",
"Language" => "Sprache",
"Help translate" => "Helfen Sie bei der Übersetzung",
-"SSL root certificates" => "SSL-Root-Zertifikate",
"Common Name" => "Zuname",
"Valid until" => "Gültig bis",
"Issued By" => "Ausgestellt von:",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Unbegrenzt",
"Other" => "Andere",
"Username" => "Benutzername",
+"Group Admin for" => "Gruppenadministrator für",
"Quota" => "Kontingent",
"Storage Location" => "Speicherort",
"Last Login" => "Letzte Anmeldung",
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 16c2b16e7f3..82fefc35c61 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Άκυρη τιμή για το %s",
-"Saved" => "Αποθηκεύτηκαν",
-"test email settings" => "δοκιμή ρυθμίσεων email",
-"If you received this email, the settings seem to be correct." => "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Παρουσιάστηκε σφάλμα κατά την αποστολή e-mail. Παρακαλώ ελέγξτε τις ρυθμίσεις σας.",
-"Email sent" => "Το Email απεστάλη ",
-"You need to set your user email before being able to send test emails." => "Πρέπει να ορίσετε το email του χρήστη πριν να είστε σε θέση να στείλετε δοκιμαστικά emails.",
-"Send mode" => "Κατάσταση αποστολής",
-"Encryption" => "Κρυπτογράφηση",
-"Authentication method" => "Μέθοδος πιστοποίησης",
-"Unable to load list from App Store" => "Σφάλμα στην φόρτωση της λίστας από το App Store",
+"Enabled" => "Ενεργοποιημένο",
+"Not enabled" => "Μη ενεργοποιημένο",
+"Recommended" => "Προτείνεται",
"Authentication error" => "Σφάλμα πιστοποίησης",
"Your full name has been changed." => "Το πλήρες όνομά σας άλλαξε.",
"Unable to change full name" => "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Λάθος κωδικός ανάκτησης διαχειριστή. Παρακαλώ ελέγξτε τον κωδικό και δοκιμάστε ξανά.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Το βασικό πλαίσιο δεν υποστηρίζει αλλαγή κωδικού, αλλά το κλειδί κρυπτογράφησης των χρηστών ενημερώθηκε επιτυχώς.",
"Unable to change password" => "Αδυναμία αλλαγής συνθηματικού",
+"Saved" => "Αποθηκεύτηκαν",
+"test email settings" => "δοκιμή ρυθμίσεων email",
+"If you received this email, the settings seem to be correct." => "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.",
+"A problem occurred while sending the email. Please revise your settings." => "Παρουσιάστηκε ένα σφάλμα κατά την αποστολή του email. Παρακαλώ αναθεωρήστε τις ρυθμίσεις σας.",
+"Email sent" => "Το Email απεστάλη ",
+"You need to set your user email before being able to send test emails." => "Πρέπει να ορίσετε το email του χρήστη πριν να είστε σε θέση να στείλετε δοκιμαστικά emails.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;",
"Add trusted domain" => "Προσθέστε αξιόπιστη περιοχή",
"Sending..." => "Αποστέλεται...",
"All" => "Όλες",
-"User Documentation" => "Τεκμηρίωση Χρήστη",
-"Admin Documentation" => "Τεκμηρίωση Διαχειριστή",
-"Update to {appversion}" => "Ενημέρωση σε {appversion}",
-"Uninstall App" => "Απεγκατάσταση Εφαρμογής",
-"Disable" => "Απενεργοποίηση",
-"Enable" => "Ενεργοποίηση",
"Please wait...." => "Παρακαλώ περιμένετε...",
"Error while disabling app" => "Σφάλμα κατά την απενεργοποίηση εισόδου",
+"Disable" => "Απενεργοποίηση",
+"Enable" => "Ενεργοποίηση",
"Error while enabling app" => "Σφάλμα κατά την ενεργοποίηση της εφαρμογής",
"Updating...." => "Ενημέρωση...",
"Error while updating app" => "Σφάλμα κατά την ενημέρωση της εφαρμογής",
-"Error" => "Σφάλμα",
-"Update" => "Ενημέρωση",
"Updated" => "Ενημερώθηκε",
"Uninstalling ...." => "Απεγκατάσταση ....",
"Error while uninstalling app" => "Σφάλμα κατά την απεγκατάσταση της εφαρμογής",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Πρέπει να δοθεί ένα έγκυρο όνομα ομάδας",
"deleted {groupName}" => "διαγραφή {groupName}",
"undo" => "αναίρεση",
-"Group Admin" => "Ομάδα Διαχειριστών",
+"no group" => "καμια ομάδα",
"never" => "ποτέ",
"deleted {userName}" => "διαγραφή {userName}",
"add group" => "προσθήκη ομάδας",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Πρέπει να δοθεί έγκυρο συνθηματικό",
"Warning: Home directory for user \"{user}\" already exists" => "Προειδοποίηση: Ο μητρικός κατάλογος του χρήστη \"{user}\" υπάρχει ήδη",
"__language_name__" => "__όνομα_γλώσσας__",
+"Personal Info" => "Προσωπικές Πληροφορίες",
+"SSL root certificates" => "Πιστοποιητικά SSL root",
+"Encryption" => "Κρυπτογράφηση",
"Everything (fatal issues, errors, warnings, info, debug)" => "Όλα (καίρια ζητήματα, σφάλματα, προειδοποιήσεις, πληροφορίες, αποσφαλμάτωση)",
"Info, warnings, errors and fatal issues" => "Πληροφορίες, προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
"Warnings, errors and fatal issues" => "Προειδοποιήσεις, σφάλματα και καίρια ζητήματα",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Παρακαλώ συνδεθείτε στο %s σας μέσω HTTPS για να ενεργοποιήσετε ή να απενεργοποιήσετε την επιβολή του SSL.",
"Email Server" => "Διακομιστής Email",
"This is used for sending out notifications." => "Χρησιμοποιείται για αποστολή ειδοποιήσεων.",
+"Send mode" => "Κατάσταση αποστολής",
"From address" => "Από τη διεύθυνση",
"mail" => "ταχυδρομείο",
+"Authentication method" => "Μέθοδος πιστοποίησης",
"Authentication required" => "Απαιτείται πιστοποίηση",
"Server address" => "Διεύθυνση διακομιστή",
"Port" => "Θύρα",
"Credentials" => "Πιστοποιητικά",
"SMTP Username" => "Όνομα χρήστη SMTP",
"SMTP Password" => "Συνθηματικό SMTP",
+"Store credentials" => "Διαπιστευτήρια αποθήκευσης",
"Test email settings" => "Δοκιμή ρυθμίσεων email",
"Send email" => "Αποστολή email",
"Log" => "Καταγραφές",
@@ -164,14 +162,15 @@ $TRANSLATIONS = array(
"Less" => "Λιγότερα",
"Version" => "Έκδοση",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Αναπτύχθηκε από την <a href=\"http://ownCloud.org/contact\" target=\"_blank\">κοινότητα ownCloud</a>. Ο <a href=\"https://github.com/owncloud\" target=\"_blank\">πηγαίος κώδικας</a> είναι υπό άδεια χρήσης <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Προσθέστε Δικιά σας Εφαρμογή",
-"More Apps" => "Περισσότερες Εφαρμογές",
-"Select an App" => "Επιλέξτε μια Εφαρμογή",
+"More apps" => "Περισσότερες εφαρμογές",
+"Add your app" => "Προσθέστε την Εφαρμογή σας ",
+"by" => "από",
"Documentation:" => "Τεκμηρίωση:",
-"See application page at apps.owncloud.com" => "Δείτε την σελίδα εφαρμογών στο apps.owncloud.com",
-"See application website" => "Δείτε την ιστοσελίδα της εφαρμογής",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "Άδεια χρήσης <span class=\"licence\"></span> από <span class=\"author\"></span>",
+"User Documentation" => "Τεκμηρίωση Χρήστη",
+"Admin Documentation" => "Τεκμηρίωση Διαχειριστή",
+"Update to %s" => "Ενημέρωση σε %s",
"Enable only for specific groups" => "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
+"Uninstall App" => "Απεγκατάσταση Εφαρμογής",
"Administrator Documentation" => "Τεκμηρίωση Διαχειριστή",
"Online Documentation" => "Τεκμηρίωση στο Διαδίκτυο",
"Forum" => "Φόρουμ",
@@ -201,7 +200,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Επιλογή εικόνας προφίλ",
"Language" => "Γλώσσα",
"Help translate" => "Βοηθήστε στη μετάφραση",
-"SSL root certificates" => "Πιστοποιητικά SSL root",
"Common Name" => "Κοινό Όνομα",
"Valid until" => "Έγκυρο έως",
"Issued By" => "Έκδόθηκε από",
diff --git a/settings/l10n/en_GB.php b/settings/l10n/en_GB.php
index 101c94c2880..86101c029c0 100644
--- a/settings/l10n/en_GB.php
+++ b/settings/l10n/en_GB.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Invalid value supplied for %s",
-"Saved" => "Saved",
-"test email settings" => "test email settings",
-"If you received this email, the settings seem to be correct." => "If you received this email, the settings seem to be correct.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "A problem occurred whilst sending the e-mail. Please revisit your settings.",
-"Email sent" => "Email sent",
-"You need to set your user email before being able to send test emails." => "You need to set your user email before being able to send test emails.",
-"Send mode" => "Send mode",
-"Encryption" => "Encryption",
-"Authentication method" => "Authentication method",
-"Unable to load list from App Store" => "Unable to load list from App Store",
+"Enabled" => "Enabled",
+"Not enabled" => "Not enabled",
+"Recommended" => "Recommended",
"Authentication error" => "Authentication error",
"Your full name has been changed." => "Your full name has been changed.",
"Unable to change full name" => "Unable to change full name",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Incorrect admin recovery password. Please check the password and try again.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end doesn't support password change, but the user's encryption key was successfully updated.",
"Unable to change password" => "Unable to change password",
+"Saved" => "Saved",
+"test email settings" => "test email settings",
+"If you received this email, the settings seem to be correct." => "If you received this email, the settings seem to be correct.",
+"A problem occurred while sending the email. Please revise your settings." => "A problem occurred whilst sending the email. Please revise your settings.",
+"Email sent" => "Email sent",
+"You need to set your user email before being able to send test emails." => "You need to set your user email before being able to send test emails.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Are you really sure you want add \"{domain}\" as a trusted domain?",
"Add trusted domain" => "Add trusted domain",
"Sending..." => "Sending...",
"All" => "All",
-"User Documentation" => "User Documentation",
-"Admin Documentation" => "Admin Documentation",
-"Update to {appversion}" => "Update to {appversion}",
-"Uninstall App" => "Uninstall App",
-"Disable" => "Disable",
-"Enable" => "Enable",
"Please wait...." => "Please wait....",
"Error while disabling app" => "Error whilst disabling app",
+"Disable" => "Disable",
+"Enable" => "Enable",
"Error while enabling app" => "Error whilst enabling app",
"Updating...." => "Updating....",
"Error while updating app" => "Error whilst updating app",
-"Error" => "Error",
-"Update" => "Update",
"Updated" => "Updated",
"Uninstalling ...." => "Uninstalling...",
"Error while uninstalling app" => "Error whilst uninstalling app",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "A valid group name must be provided",
"deleted {groupName}" => "deleted {groupName}",
"undo" => "undo",
-"Group Admin" => "Group Admin",
+"no group" => "no group",
"never" => "never",
"deleted {userName}" => "deleted {userName}",
"add group" => "add group",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "A valid password must be provided",
"Warning: Home directory for user \"{user}\" already exists" => "Warning: Home directory for user \"{user}\" already exists",
"__language_name__" => "English (British English)",
+"Personal Info" => "Personal Info",
+"SSL root certificates" => "SSL root certificates",
+"Encryption" => "Encryption",
"Everything (fatal issues, errors, warnings, info, debug)" => "Everything (fatal issues, errors, warnings, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, warnings, errors and fatal issues",
"Warnings, errors and fatal issues" => "Warnings, errors and fatal issues",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Please connect to your %s via HTTPS to enable or disable the SSL enforcement.",
"Email Server" => "Email Server",
"This is used for sending out notifications." => "This is used for sending out notifications.",
+"Send mode" => "Send mode",
"From address" => "From address",
"mail" => "mail",
+"Authentication method" => "Authentication method",
"Authentication required" => "Authentication required",
"Server address" => "Server address",
"Port" => "Port",
"Credentials" => "Credentials",
"SMTP Username" => "SMTP Username",
"SMTP Password" => "SMTP Password",
+"Store credentials" => "Store credentials",
"Test email settings" => "Test email settings",
"Send email" => "Send email",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Less",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public Licence\">AGPL</abbr></a>.",
-"Add your App" => "Add your App",
-"More Apps" => "More Apps",
-"Select an App" => "Select an App",
+"More apps" => "More apps",
+"Add your app" => "Add your app",
+"by" => "by",
+"licensed" => "licensed",
"Documentation:" => "Documentation:",
-"See application page at apps.owncloud.com" => "See application page at apps.owncloud.com",
-"See application website" => "See application website",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>",
+"User Documentation" => "User Documentation",
+"Admin Documentation" => "Admin Documentation",
+"Update to %s" => "Update to %s",
"Enable only for specific groups" => "Enable only for specific groups",
+"Uninstall App" => "Uninstall App",
"Administrator Documentation" => "Administrator Documentation",
"Online Documentation" => "Online Documentation",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Choose as profile image",
"Language" => "Language",
"Help translate" => "Help translate",
-"SSL root certificates" => "SSL root certificates",
"Common Name" => "Common Name",
"Valid until" => "Valid until",
"Issued By" => "Issued By",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Unlimited",
"Other" => "Other",
"Username" => "Username",
+"Group Admin for" => "Group Admin for",
"Quota" => "Quota",
"Storage Location" => "Storage Location",
"Last Login" => "Last Login",
diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php
index 53724f9bc6c..44506ad4e3c 100644
--- a/settings/l10n/eo.php
+++ b/settings/l10n/eo.php
@@ -1,11 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "Konservita",
-"Email sent" => "La retpoŝtaĵo sendiĝis",
-"Send mode" => "Sendi pli",
-"Encryption" => "Ĉifrado",
-"Authentication method" => "Aŭtentiga metodo",
-"Unable to load list from App Store" => "Ne eblis ŝargi liston el aplikaĵovendejo",
+"Enabled" => "Kapabligita",
"Authentication error" => "Aŭtentiga eraro",
"Your full name has been changed." => "Via plena nomo ŝanĝitas.",
"Unable to change full name" => "Ne eblis ŝanĝi la plenan nomon",
@@ -26,21 +21,17 @@ $TRANSLATIONS = array(
"Couldn't update app." => "Ne eblis ĝisdatigi la aplikaĵon.",
"Wrong password" => "Malĝusta pasvorto",
"Unable to change password" => "Ne eblis ŝanĝi la pasvorton",
+"Saved" => "Konservita",
+"Email sent" => "La retpoŝtaĵo sendiĝis",
"Sending..." => "Sendante...",
"All" => "Ĉio",
-"User Documentation" => "Dokumentaro por uzantoj",
-"Admin Documentation" => "Administra dokumentaro",
-"Update to {appversion}" => "Ĝisdatigi al {appversion}",
-"Uninstall App" => "Malinstali aplikaĵon",
-"Disable" => "Malkapabligi",
-"Enable" => "Kapabligi",
"Please wait...." => "Bonvolu atendi...",
"Error while disabling app" => "Eraris malkapabligo de aplikaĵo",
+"Disable" => "Malkapabligi",
+"Enable" => "Kapabligi",
"Error while enabling app" => "Eraris kapabligo de aplikaĵo",
"Updating...." => "Ĝisdatigata...",
"Error while updating app" => "Eraris ĝisdatigo de la aplikaĵo",
-"Error" => "Eraro",
-"Update" => "Ĝisdatigi",
"Updated" => "Ĝisdatigita",
"Uninstalling ...." => "Malinstalante...",
"Error while uninstalling app" => "Eraris malinstalo de aplikaĵo",
@@ -57,7 +48,6 @@ $TRANSLATIONS = array(
"Groups" => "Grupoj",
"deleted {groupName}" => "{groupName} foriĝis",
"undo" => "malfari",
-"Group Admin" => "Grupadministranto",
"never" => "neniam",
"deleted {userName}" => "{userName} foriĝis",
"add group" => "aldoni grupon",
@@ -66,6 +56,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Valida pasvorto devas proviziĝi",
"Warning: Home directory for user \"{user}\" already exists" => "Averto: hejmdosierujo por la uzanto “{user”} jam ekzistas",
"__language_name__" => "Esperanto",
+"SSL root certificates" => "Radikaj SSL-atestoj",
+"Encryption" => "Ĉifrado",
"Everything (fatal issues, errors, warnings, info, debug)" => "Ĉio (fatalaĵoj, eraroj, avertoj, informoj, sencimigaj mesaĝoj)",
"Info, warnings, errors and fatal issues" => "Informoj, avertoj, eraroj kaj fatalaĵoj",
"Warnings, errors and fatal issues" => "Avertoj, eraroj kaj fatalaĵoj",
@@ -88,8 +80,10 @@ $TRANSLATIONS = array(
"Allow resharing" => "Kapabligi rekunhavigon",
"Security" => "Sekuro",
"Email Server" => "Retpoŝtoservilo",
+"Send mode" => "Sendi pli",
"From address" => "El adreso",
"mail" => "retpoŝto",
+"Authentication method" => "Aŭtentiga metodo",
"Authentication required" => "Aŭtentiĝo nepras",
"Server address" => "Servila adreso",
"Port" => "Pordo",
@@ -103,14 +97,12 @@ $TRANSLATIONS = array(
"Less" => "Malpli",
"Version" => "Eldono",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Ellaborita de la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komunumo de ownCloud</a>, la <a href=\"https://github.com/owncloud\" target=\"_blank\">fontokodo</a> publikas laŭ la permesilo <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Aldonu vian aplikaĵon",
-"More Apps" => "Pli da aplikaĵoj",
-"Select an App" => "Elekti aplikaĵon",
+"by" => "de",
"Documentation:" => "Dokumentaro:",
-"See application page at apps.owncloud.com" => "Vidu la paĝon pri aplikaĵoj ĉe apps.owncloud.com",
-"See application website" => "Vidi la TTT-ejon de la aplikaĵo",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"</span>-permesilhavigita de <span class=\"author\"></span>",
+"User Documentation" => "Dokumentaro por uzantoj",
+"Admin Documentation" => "Administra dokumentaro",
"Enable only for specific groups" => "Kapabligi nur por specifajn grupojn",
+"Uninstall App" => "Malinstali aplikaĵon",
"Administrator Documentation" => "Dokumentaro por administrantoj",
"Online Documentation" => "Reta dokumentaro",
"Forum" => "Forumo",
@@ -136,7 +128,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Elekti kiel profilan bildon",
"Language" => "Lingvo",
"Help translate" => "Helpu traduki",
-"SSL root certificates" => "Radikaj SSL-atestoj",
"Import Root Certificate" => "Enporti radikan ateston",
"Log-in password" => "Ensaluta pasvorto",
"Decrypt all Files" => "Malĉifri ĉiujn dosierojn",
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index 661f20d3181..91fdbe2f3e1 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Se introdujo un valor inválido para %s",
-"Saved" => "Guardado",
-"test email settings" => "probar configuración de correo",
-"If you received this email, the settings seem to be correct." => "Si recibió este mensaje de correo electrónico, su configuración debe estar correcta.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Ocurrió un problema la enviar el mensaje. Revise la configuración.",
-"Email sent" => "Correo electrónico enviado",
-"You need to set your user email before being able to send test emails." => "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.",
-"Send mode" => "Modo de envío",
-"Encryption" => "Cifrado",
-"Authentication method" => "Método de autenticación",
-"Unable to load list from App Store" => "No se pudo cargar la lista desde el App Store",
+"Enabled" => "Habilitado",
+"Not enabled" => "No habilitado",
+"Recommended" => "Recomendado",
"Authentication error" => "Error de autenticación",
"Your full name has been changed." => "Se ha cambiado su nombre completo.",
"Unable to change full name" => "No se puede cambiar el nombre completo",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "El back-end no soporta cambios de contraseña, pero la clave de cifrado del usuario ha sido actualizada satisfactoriamente.",
"Unable to change password" => "No se ha podido cambiar la contraseña",
+"Saved" => "Guardado",
+"test email settings" => "probar configuración de correo electrónico",
+"If you received this email, the settings seem to be correct." => "Si recibió este mensaje de correo electrónico, su configuración debe estar correcta.",
+"A problem occurred while sending the email. Please revise your settings." => "Ocurrió un problema al mandar el mensaje. Revise la configuración.",
+"Email sent" => "Correo electrónico enviado",
+"You need to set your user email before being able to send test emails." => "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?",
"Add trusted domain" => "Agregar dominio de confianza",
"Sending..." => "Enviando...",
"All" => "Todos",
-"User Documentation" => "Documentación de usuario",
-"Admin Documentation" => "Documentación para administradores",
-"Update to {appversion}" => "Actualizar a {appversion}",
-"Uninstall App" => "Desinstalar aplicación",
-"Disable" => "Desactivar",
-"Enable" => "Activar",
"Please wait...." => "Espere, por favor....",
"Error while disabling app" => "Error mientras se desactivaba la aplicación",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
"Error while enabling app" => "Error mientras se activaba la aplicación",
"Updating...." => "Actualizando....",
"Error while updating app" => "Error mientras se actualizaba la aplicación",
-"Error" => "Error",
-"Update" => "Actualizar",
"Updated" => "Actualizado",
"Uninstalling ...." => "Desinstalando...",
"Error while uninstalling app" => "Error al desinstalar la aplicación",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Se debe dar un nombre válido para el grupo ",
"deleted {groupName}" => "borrado {groupName}",
"undo" => "deshacer",
-"Group Admin" => "Administrador del Grupo",
+"no group" => "sin grupo",
"never" => "nunca",
"deleted {userName}" => "borrado {userName}",
"add group" => "añadir Grupo",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Se debe proporcionar una contraseña válida",
"Warning: Home directory for user \"{user}\" already exists" => "Atención: el directorio de inicio para el usuario \"{user}\" ya existe.",
"__language_name__" => "Castellano",
+"Personal Info" => "Información personal",
+"SSL root certificates" => "Certificados raíz SSL",
+"Encryption" => "Cifrado",
"Everything (fatal issues, errors, warnings, info, debug)" => "Todo (Información, Avisos, Errores, debug y problemas fatales)",
"Info, warnings, errors and fatal issues" => "Información, Avisos, Errores y problemas fatales",
"Warnings, errors and fatal issues" => "Advertencias, errores y problemas fatales",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Por favor, conéctese a su %s a través de HTTPS para habilitar o deshabilitar la aplicación de SSL.",
"Email Server" => "Servidor de correo electrónico",
"This is used for sending out notifications." => "Esto se usa para enviar notificaciones.",
+"Send mode" => "Modo de envío",
"From address" => "Desde la dirección",
"mail" => "correo electrónico",
+"Authentication method" => "Método de autenticación",
"Authentication required" => "Se necesita autenticación",
"Server address" => "Dirección del servidor",
"Port" => "Puerto",
"Credentials" => "Credenciales",
"SMTP Username" => "Nombre de usuario SMTP",
"SMTP Password" => "Contraseña SMTP",
+"Store credentials" => "Almacenar credenciales",
"Test email settings" => "Probar configuración de correo electrónico",
"Send email" => "Enviar mensaje",
"Log" => "Registro",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">código fuente</a> está bajo licencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Añade tu aplicación",
-"More Apps" => "Más aplicaciones",
-"Select an App" => "Seleccionar una aplicación",
+"More apps" => "Más aplicaciones",
+"Add your app" => "Agregue su aplicación",
+"by" => "por",
+"licensed" => "licenciado",
"Documentation:" => "Documentación:",
-"See application page at apps.owncloud.com" => "Ver la página de aplicaciones en apps.owncloud.com",
-"See application website" => "Ver sitio web de la aplicación",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencia otorgada por <span class=\"author\"></span>",
+"User Documentation" => "Documentación de usuario",
+"Admin Documentation" => "Documentación para administradores",
+"Update to %s" => "Actualizado a %s",
"Enable only for specific groups" => "Activar solamente para grupos específicos",
+"Uninstall App" => "Desinstalar aplicación",
"Administrator Documentation" => "Documentación de administrador",
"Online Documentation" => "Documentación en línea",
"Forum" => "Foro",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Seleccionar como imagen de perfil",
"Language" => "Idioma",
"Help translate" => "Ayúdanos a traducir",
-"SSL root certificates" => "Certificados raíz SSL",
"Common Name" => "Nombre común",
"Valid until" => "Válido hasta",
"Issued By" => "Emitido por",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Ilimitado",
"Other" => "Otro",
"Username" => "Nombre de usuario",
+"Group Admin for" => "Grupo administrador para",
"Quota" => "Cuota",
"Storage Location" => "Ubicación de almacenamiento",
"Last Login" => "Último inicio de sesión",
diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php
index 98082c72a80..1b27515d77d 100644
--- a/settings/l10n/es_AR.php
+++ b/settings/l10n/es_AR.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Parámetro suministrado invalido para %s",
-"Saved" => "Guardado",
-"test email settings" => "Configuración de correo de prueba.",
-"If you received this email, the settings seem to be correct." => "Si recibió este correo, la configuración parece estar correcta.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Un problema ocurrió cuando se intentó enviar el correo electrónico. Por favor revea su configuración.",
-"Email sent" => "e-mail mandado",
-"You need to set your user email before being able to send test emails." => "Necesita especificar el usuario de correo electrónico antes de poder enviar correos electrónicos de prueba.",
-"Send mode" => "Modo de envio",
-"Encryption" => "Encriptación",
-"Authentication method" => "Método de autenticación",
-"Unable to load list from App Store" => "Imposible cargar la lista desde el App Store",
+"Enabled" => "Habilitado",
"Authentication error" => "Error al autenticar",
"Your full name has been changed." => "Su nombre completo ha sido cambiado.",
"Unable to change full name" => "Imposible cambiar el nombre completo",
@@ -33,20 +23,20 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Contraseña de recuperación administrativa incorrecta. Por favor, chequee la clave e intente de nuevo",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "El back-end no soporta cambios de contraseña, pero las claves de encriptación fueron subidas exitosamente.",
"Unable to change password" => "Imposible cambiar la contraseña",
+"Saved" => "Guardado",
+"test email settings" => "Configuración de correo de prueba.",
+"If you received this email, the settings seem to be correct." => "Si recibió este correo, la configuración parece estar correcta.",
+"Email sent" => "e-mail mandado",
+"You need to set your user email before being able to send test emails." => "Necesita especificar el usuario de correo electrónico antes de poder enviar correos electrónicos de prueba.",
"Sending..." => "Enviando...",
"All" => "Todos",
-"User Documentation" => "Documentación de Usuario",
-"Admin Documentation" => "Documentación de Administrador.",
-"Update to {appversion}" => "Actualizar a {appversion}",
-"Disable" => "Desactivar",
-"Enable" => "Activar",
"Please wait...." => "Por favor, esperá....",
"Error while disabling app" => "Se ha producido un error mientras se deshabilitaba la aplicación",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
"Error while enabling app" => "Se ha producido un error mientras se habilitaba la aplicación",
"Updating...." => "Actualizando....",
"Error while updating app" => "Error al actualizar App",
-"Error" => "Error",
-"Update" => "Actualizar",
"Updated" => "Actualizado",
"Select a profile picture" => "Seleccionar una imágen de perfil",
"Very weak password" => "Contraseña muy débil.",
@@ -58,7 +48,6 @@ $TRANSLATIONS = array(
"Decrypting files... Please wait, this can take some time." => "Desencriptando archivos... Por favor espere, esto puede tardar.",
"Groups" => "Grupos",
"undo" => "deshacer",
-"Group Admin" => "Grupo Administrador",
"never" => "nunca",
"add group" => "agregar grupo",
"A valid username must be provided" => "Debe ingresar un nombre de usuario válido",
@@ -66,6 +55,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Debe ingresar una contraseña válida",
"Warning: Home directory for user \"{user}\" already exists" => "Advertencia: El directorio Home del usuario \"{user}\" ya existe",
"__language_name__" => "Castellano (Argentina)",
+"SSL root certificates" => "certificados SSL raíz",
+"Encryption" => "Encriptación",
"Everything (fatal issues, errors, warnings, info, debug)" => "Todo (notificaciones fatales, errores, advertencias, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, advertencias, errores y notificaciones fatales",
"Warnings, errors and fatal issues" => "Advertencias, errores y notificaciones fatales",
@@ -104,7 +95,9 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Por favor conéctese a su %s por medio de HTTPS para habilitar o deshabilitar la característica SSL",
"Email Server" => "Servidor de correo electrónico",
"This is used for sending out notifications." => "Esto es usado para enviar notificaciones.",
+"Send mode" => "Modo de envio",
"From address" => "Dirección remitente",
+"Authentication method" => "Método de autenticación",
"Authentication required" => "Autentificación requerida",
"Server address" => "Dirección del servidor",
"Port" => "Puerto",
@@ -119,13 +112,10 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">código fuente</a> está bajo licencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Añadí tu App",
-"More Apps" => "Más Apps",
-"Select an App" => "Elegí una App",
+"by" => "por",
"Documentation:" => "Documentación:",
-"See application page at apps.owncloud.com" => "Mirá la web de aplicaciones apps.owncloud.com",
-"See application website" => "Ver sitio web de la aplicación",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\">",
+"User Documentation" => "Documentación de Usuario",
+"Admin Documentation" => "Documentación de Administrador.",
"Administrator Documentation" => "Documentación de Administrador",
"Online Documentation" => "Documentación en línea",
"Forum" => "Foro",
@@ -154,7 +144,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Elegir como imagen de perfil",
"Language" => "Idioma",
"Help translate" => "Ayudanos a traducir",
-"SSL root certificates" => "certificados SSL raíz",
"Import Root Certificate" => "Importar certificado raíz",
"The encryption app is no longer enabled, please decrypt all your files" => "La aplicación de encriptación ya no está habilidata, por favor desencripte todos sus archivos.",
"Log-in password" => "Clave de acceso",
diff --git a/settings/l10n/es_CL.php b/settings/l10n/es_CL.php
index bdf34e62979..fc5e328f3bc 100644
--- a/settings/l10n/es_CL.php
+++ b/settings/l10n/es_CL.php
@@ -1,6 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Error" => "Error",
"Password" => "Clave",
"Cancel" => "Cancelar",
"Username" => "Usuario"
diff --git a/settings/l10n/es_MX.php b/settings/l10n/es_MX.php
index 1bb88e959cd..4db87b4e68b 100644
--- a/settings/l10n/es_MX.php
+++ b/settings/l10n/es_MX.php
@@ -1,8 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Correo electrónico enviado",
-"Encryption" => "Cifrado",
-"Unable to load list from App Store" => "No se pudo cargar la lista desde el App Store",
+"Enabled" => "Habilitar",
"Authentication error" => "Error de autenticación",
"Your full name has been changed." => "Se ha cambiado su nombre completo.",
"Unable to change full name" => "No se puede cambiar el nombre completo",
@@ -24,25 +22,21 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "El back-end no soporta cambios de contraseña, pero la clave de cifrado del usuario ha sido actualizada satisfactoriamente.",
"Unable to change password" => "No se ha podido cambiar la contraseña",
+"Email sent" => "Correo electrónico enviado",
"All" => "Todos",
-"User Documentation" => "Documentación de usuario",
-"Update to {appversion}" => "Actualizado a {appversion}",
-"Disable" => "Desactivar",
-"Enable" => "Activar",
"Please wait...." => "Espere, por favor....",
"Error while disabling app" => "Error mientras se desactivaba la aplicación",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
"Error while enabling app" => "Error mientras se activaba la aplicación",
"Updating...." => "Actualizando....",
"Error while updating app" => "Error mientras se actualizaba la aplicación",
-"Error" => "Error",
-"Update" => "Actualizar",
"Updated" => "Actualizado",
"Select a profile picture" => "Seleccionar una imagen de perfil",
"Delete" => "Eliminar",
"Decrypting files... Please wait, this can take some time." => "Descifrando archivos... Espere por favor, esto puede llevar algo de tiempo.",
"Groups" => "Grupos",
"undo" => "deshacer",
-"Group Admin" => "Administrador del Grupo",
"never" => "nunca",
"add group" => "añadir Grupo",
"A valid username must be provided" => "Se debe proporcionar un nombre de usuario válido",
@@ -50,6 +44,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Se debe proporcionar una contraseña válida",
"Warning: Home directory for user \"{user}\" already exists" => "Atención: el directorio de inicio para el usuario \"{user}\" ya existe.",
"__language_name__" => "Español (México)",
+"SSL root certificates" => "Certificados raíz SSL",
+"Encryption" => "Cifrado",
"Everything (fatal issues, errors, warnings, info, debug)" => "Todo (Información, Avisos, Errores, debug y problemas fatales)",
"Info, warnings, errors and fatal issues" => "Información, Avisos, Errores y problemas fatales",
"Warnings, errors and fatal issues" => "Advertencias, errores y problemas fatales",
@@ -88,11 +84,8 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desarrollado por la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidad ownCloud</a>, el <a href=\"https://github.com/owncloud\" target=\"_blank\">código fuente</a> está bajo licencia <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Añade tu aplicación",
-"More Apps" => "Más aplicaciones",
-"Select an App" => "Seleccionar una aplicación",
-"See application page at apps.owncloud.com" => "Ver la página de aplicaciones en apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencia otorgada por <span class=\"author\"></span>",
+"by" => "por",
+"User Documentation" => "Documentación de usuario",
"Administrator Documentation" => "Documentación de administrador",
"Online Documentation" => "Documentación en línea",
"Forum" => "Foro",
@@ -120,7 +113,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Seleccionar como imagen de perfil",
"Language" => "Idioma",
"Help translate" => "Ayúdanos a traducir",
-"SSL root certificates" => "Certificados raíz SSL",
"Import Root Certificate" => "Importar certificado raíz",
"The encryption app is no longer enabled, please decrypt all your files" => "La aplicación de cifrado ya no está activada, descifre todos sus archivos",
"Log-in password" => "Contraseña de acceso",
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index 11e72734092..e38cb7ff242 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Sisestatud sobimatu väärtus %s jaoks",
-"Saved" => "Salvestatud",
-"test email settings" => "testi e-posti seadeid",
-"If you received this email, the settings seem to be correct." => "Kui said selle kirja, siis on seadistus korrektne.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Kirja saatmisel tekkis tõrge. Palun kontrolli üle oma seadistus.",
-"Email sent" => "E-kiri on saadetud",
-"You need to set your user email before being able to send test emails." => "Pead seadistama oma e-postienne kui on võimalik saata test-kirju.",
-"Send mode" => "Saatmise viis",
-"Encryption" => "Krüpteerimine",
-"Authentication method" => "Autentimise meetod",
-"Unable to load list from App Store" => "App Store'i nimekirja laadimine ebaõnnestus",
+"Enabled" => "Sisse lülitatud",
+"Not enabled" => "Pole sisse lülitatud",
+"Recommended" => "Soovitatud",
"Authentication error" => "Autentimise viga",
"Your full name has been changed." => "Sinu täispikk nimi on muudetud.",
"Unable to change full name" => "Täispika nime muutmine ebaõnnestus",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Vale administraatori taasteparool. Palun kontrolli parooli ning proovi uuesti.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Tagarakend ei toeta parooli vahetust, kuid kasutaja krüptimisvõti uuendati edukalt.",
"Unable to change password" => "Ei suuda parooli muuta",
+"Saved" => "Salvestatud",
+"test email settings" => "testi e-posti seadeid",
+"If you received this email, the settings seem to be correct." => "Kui said selle kirja, siis on seadistus korrektne.",
+"A problem occurred while sending the email. Please revise your settings." => "Kirja saatmisel tekkis tõrge. Palun kontrolli üle oma seadistus.",
+"Email sent" => "E-kiri on saadetud",
+"You need to set your user email before being able to send test emails." => "Pead seadistama oma e-postienne kui on võimalik saata test-kirju.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?",
"Add trusted domain" => "Lis ausaldusväärne domeen",
"Sending..." => "Saadan...",
"All" => "Kõik",
-"User Documentation" => "Kasutaja dokumentatsioon",
-"Admin Documentation" => "Admin dokumentatsioon",
-"Update to {appversion}" => "Uuenda versioonile {appversion}",
-"Uninstall App" => "Eemada rakend",
-"Disable" => "Lülita välja",
-"Enable" => "Lülita sisse",
"Please wait...." => "Palun oota...",
"Error while disabling app" => "Viga rakenduse keelamisel",
+"Disable" => "Lülita välja",
+"Enable" => "Lülita sisse",
"Error while enabling app" => "Viga rakenduse lubamisel",
"Updating...." => "Uuendamine...",
"Error while updating app" => "Viga rakenduse uuendamisel",
-"Error" => "Viga",
-"Update" => "Uuenda",
"Updated" => "Uuendatud",
"Uninstalling ...." => "Eemaldan...",
"Error while uninstalling app" => "Viga rakendi eemaldamisel",
@@ -78,7 +70,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Sisesta nõuetele vastav grupi nimi",
"deleted {groupName}" => "kustutatud {groupName}",
"undo" => "tagasi",
-"Group Admin" => "Grupi admin",
"never" => "mitte kunagi",
"deleted {userName}" => "kustutatud {userName}",
"add group" => "lisa grupp",
@@ -87,6 +78,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Sisesta nõuetele vastav parool",
"Warning: Home directory for user \"{user}\" already exists" => "Hoiatus: kasutaja \"{user}\" kodukataloog on juba olemas",
"__language_name__" => "Eesti",
+"SSL root certificates" => "SSL root sertifikaadid",
+"Encryption" => "Krüpteerimine",
"Everything (fatal issues, errors, warnings, info, debug)" => "Kõik (tõsised probleemid, veateated, hoiatused, info, veatuvastus)",
"Info, warnings, errors and fatal issues" => "Info, hoiatused, veateted ja tõsised probleemid",
"Warnings, errors and fatal issues" => "Hoiatused, veateated ja tõsised probleemid",
@@ -118,6 +111,8 @@ $TRANSLATIONS = array(
"We strongly suggest to install the required packages on your system to support one of the following locales: %s." => "Soovitame tungivalt paigaldada vajalikud paketid oma süsteemi tagamaks tuge järgmistele lokaliseeringutele: %s.",
"URL generation in notification emails" => "URL-ide loomine teavituskirjades",
"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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" => "Kui sinu sait pole paigaldatud domeeni juurkausta ja see kasutab ajastatud tegevusi, siis võib tekkide probleeme URL-ide loomisega. Nende probleemide vältimiseks sisesta palun failis config.php valikusse \"overwritewebroot\" oma veebiserveri juurkaust (Soovituslik: \"%s\")",
+"Connectivity checks" => "Ühenduse kontrollimine",
+"No problems found" => "Ühtegi probleemi ei leitud",
"Please double check the <a href='%s'>installation guides</a>." => "Palun tutvu veelkord <a href='%s'>paigalduse juhenditega</a>.",
"Cron" => "Cron",
"Last cron was executed at %s." => "Cron käivitati viimati %s.",
@@ -146,14 +141,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Palun ühendu oma %s üle HTTPS või keela SSL kasutamine.",
"Email Server" => "Postiserver",
"This is used for sending out notifications." => "Seda kasutatakse teadete välja saatmiseks.",
+"Send mode" => "Saatmise viis",
"From address" => "Saatja aadress",
"mail" => "e-mail",
+"Authentication method" => "Autentimise meetod",
"Authentication required" => "Autentimine on vajalik",
"Server address" => "Serveri aadress",
"Port" => "Port",
"Credentials" => "Kasutajatunnused",
"SMTP Username" => "SMTP kasutajatunnus",
"SMTP Password" => "SMTP parool",
+"Store credentials" => "Säilita kasutajaandmed",
"Test email settings" => "Testi e-posti seadeid",
"Send email" => "Saada kiri",
"Log" => "Logi",
@@ -162,14 +160,16 @@ $TRANSLATIONS = array(
"Less" => "Vähem",
"Version" => "Versioon",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Arendatud <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud kogukonna</a> poolt. <a href=\"https://github.com/owncloud\" target=\"_blank\">Lähtekood</a> on avaldatud ja kaetud <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> litsentsiga.",
-"Add your App" => "Lisa oma rakendus",
-"More Apps" => "Veel rakendusi",
-"Select an App" => "Vali programm",
+"More apps" => "Rohkem rakendusi",
+"Add your app" => "Lisa oma rakendus",
+"by" => "lisas",
+"licensed" => "litsenseeritud",
"Documentation:" => "Dokumentatsioon:",
-"See application page at apps.owncloud.com" => "Vaata rakenduste lehte aadressil apps.owncloud.com",
-"See application website" => "Vaata rakendi veebilehte",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-litsenseeritud <span class=\"author\"></span>",
+"User Documentation" => "Kasutaja dokumentatsioon",
+"Admin Documentation" => "Admin dokumentatsioon",
+"Update to %s" => "Uuenda versioonile %s",
"Enable only for specific groups" => "Luba ainult kindlad grupid",
+"Uninstall App" => "Eemada rakend",
"Administrator Documentation" => "Administraatori dokumentatsioon",
"Online Documentation" => "Online dokumentatsioon",
"Forum" => "Foorum",
@@ -199,7 +199,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Vali profiilipildiks",
"Language" => "Keel",
"Help translate" => "Aita tõlkida",
-"SSL root certificates" => "SSL root sertifikaadid",
"Common Name" => "Üldnimetus",
"Valid until" => "Kehtib kuni",
"Issued By" => "isas",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
index 284b3ffdec3..6df2823064e 100644
--- a/settings/l10n/eu.php
+++ b/settings/l10n/eu.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "%s-entzako baliogabea",
-"Saved" => "Gordeta",
-"test email settings" => "probatu eposta ezarpenak",
-"If you received this email, the settings seem to be correct." => "Eposta hau jaso baduzu, zure ezarpenak egokiak direnaren seinale",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Arazo bat gertatu da eposta bidaltzean. Berrikusi zure ezarpenak.",
-"Email sent" => "Eposta bidalia",
-"You need to set your user email before being able to send test emails." => "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
-"Send mode" => "Bidaltzeko modua",
-"Encryption" => "Enkriptazioa",
-"Authentication method" => "Autentifikazio metodoa",
-"Unable to load list from App Store" => "Ezin izan da App Dendatik zerrenda kargatu",
+"Enabled" => "Gaitua",
"Authentication error" => "Autentifikazio errorea",
"Your full name has been changed." => "Zure izena aldatu egin da.",
"Unable to change full name" => "Ezin izan da izena aldatu",
@@ -40,23 +30,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Administratzailearen berreskuratze pasahitza ez egokia. Mesedez egiaztatu pasahitza eta saiatu berriz.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Atzeko prozesuak ez du pasahitz aldaketa onartzen, baina erabiltzailearen enkriptatze gakoa ongi eguneratu da.",
"Unable to change password" => "Ezin izan da pasahitza aldatu",
+"Saved" => "Gordeta",
+"test email settings" => "probatu eposta ezarpenak",
+"If you received this email, the settings seem to be correct." => "Eposta hau jaso baduzu, zure ezarpenak egokiak direnaren seinale",
+"Email sent" => "Eposta bidalia",
+"You need to set your user email before being able to send test emails." => "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?",
"Add trusted domain" => "Gehitu domeinu fidagarria",
"Sending..." => "Bidaltzen...",
"All" => "Denak",
-"User Documentation" => "Erabiltzaile dokumentazioa",
-"Admin Documentation" => "Administrazio dokumentazioa",
-"Update to {appversion}" => "Eguneratu {appversion}-ra",
-"Uninstall App" => "Desinstalatu aplikazioa",
-"Disable" => "Ez-gaitu",
-"Enable" => "Gaitu",
"Please wait...." => "Itxoin mesedez...",
"Error while disabling app" => "Erroea izan da aplikazioa desgaitzerakoan",
+"Disable" => "Ez-gaitu",
+"Enable" => "Gaitu",
"Error while enabling app" => "Erroea izan da aplikazioa gaitzerakoan",
"Updating...." => "Eguneratzen...",
"Error while updating app" => "Errorea aplikazioa eguneratzen zen bitartean",
-"Error" => "Errorea",
-"Update" => "Eguneratu",
"Updated" => "Eguneratuta",
"Uninstalling ...." => "Desinstalatzen ...",
"Error while uninstalling app" => "Erroea izan da aplikazioa desinstalatzerakoan",
@@ -77,7 +66,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Baliozko talde izena eman behar da",
"deleted {groupName}" => "{groupName} ezbatuta",
"undo" => "desegin",
-"Group Admin" => "Talde administradorea",
"never" => "inoiz",
"deleted {userName}" => "{userName} ezabatuta",
"add group" => "gehitu taldea",
@@ -86,6 +74,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Baliozko pasahitza eman behar da",
"Warning: Home directory for user \"{user}\" already exists" => "Abisua: \"{user}\" erabiltzailearen Home karpeta dagoeneko exisititzen da",
"__language_name__" => "Euskara",
+"SSL root certificates" => "SSL erro ziurtagiriak",
+"Encryption" => "Enkriptazioa",
"Everything (fatal issues, errors, warnings, info, debug)" => "Dena (arazo larriak, erroreak, abisuak, informazioa, arazketa)",
"Info, warnings, errors and fatal issues" => "Informazioa, abisuak, erroreak eta arazo larriak.",
"Warnings, errors and fatal issues" => "Abisuak, erroreak eta arazo larriak",
@@ -145,8 +135,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Mesedez konektatu zure %s-ra HTTPS bidez SSL zehaztapenak aldatzeko.",
"Email Server" => "Eposta zerbitzaria",
"This is used for sending out notifications." => "Hau jakinarazpenak bidaltzeko erabiltzen da.",
+"Send mode" => "Bidaltzeko modua",
"From address" => "Helbidetik",
"mail" => "posta",
+"Authentication method" => "Autentifikazio metodoa",
"Authentication required" => "Autentikazioa beharrezkoa",
"Server address" => "Zerbitzariaren helbidea",
"Port" => "Portua",
@@ -161,14 +153,13 @@ $TRANSLATIONS = array(
"Less" => "Gutxiago",
"Version" => "Bertsioa",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud komunitateak</a> garatuta, <a href=\"https://github.com/owncloud\" target=\"_blank\">itubruru kodea</a><a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr> lizentziarekin banatzen da</a>.",
-"Add your App" => "Gehitu zure aplikazioa",
-"More Apps" => "Aplikazio gehiago",
-"Select an App" => "Aukeratu aplikazio bat",
+"More apps" => "App gehiago",
+"by" => " Egilea:",
"Documentation:" => "Dokumentazioa:",
-"See application page at apps.owncloud.com" => "Ikusi aplikazioaren orria apps.owncloud.com orrian",
-"See application website" => "Ikusi aplikazioaren webgunea",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lizentziatua <span class=\"author\"></span>",
+"User Documentation" => "Erabiltzaile dokumentazioa",
+"Admin Documentation" => "Administrazio dokumentazioa",
"Enable only for specific groups" => "Baimendu bakarri talde espezifikoetarako",
+"Uninstall App" => "Desinstalatu aplikazioa",
"Administrator Documentation" => "Administratzaile dokumentazioa",
"Online Documentation" => "Online dokumentazioa",
"Forum" => "Foroa",
@@ -198,7 +189,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Profil irudi bezala aukeratu",
"Language" => "Hizkuntza",
"Help translate" => "Lagundu itzultzen",
-"SSL root certificates" => "SSL erro ziurtagiriak",
"Import Root Certificate" => "Inportatu erro ziurtagiria",
"The encryption app is no longer enabled, please decrypt all your files" => "Enkriptazio aplikazioa ez dago jada gaiturik, mesedez desenkriptatu zure fitxategi guztiak.",
"Log-in password" => "Saioa hasteko pasahitza",
diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php
index c72e83bb8ad..ef65cc8b78c 100644
--- a/settings/l10n/fa.php
+++ b/settings/l10n/fa.php
@@ -1,13 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "مقدار ارائه شده برای %s معتبر نیست",
-"Saved" => "ذخیره شد",
-"test email settings" => "تنظیمات ایمیل آزمایشی",
-"Email sent" => "ایمیل ارسال شد",
-"Send mode" => "حالت ارسال",
-"Encryption" => "رمزگذاری",
-"Authentication method" => "روش احراز هویت",
-"Unable to load list from App Store" => "قادر به بارگذاری لیست از فروشگاه اپ نیستم",
+"Enabled" => "فعال شده",
"Authentication error" => "خطا در اعتبار سنجی",
"Your full name has been changed." => "نام کامل شما تغییر یافت",
"Unable to change full name" => "امکان تغییر نام کامل وجود ندارد",
@@ -33,21 +26,18 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "رمز مدیریتی بازیابی غلط است. لطفاً رمز را کنترل کرده و دوباره امتحان نمایید.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "سیستم مدیریتی امکان تغییر رمز را پشتیبانی نمی‌کند. ولی کلید رمزنگاری کاربران با موفقیت به روز شد.",
"Unable to change password" => "نمی‌توان رمز را تغییر داد",
+"Saved" => "ذخیره شد",
+"test email settings" => "تنظیمات ایمیل آزمایشی",
+"Email sent" => "ایمیل ارسال شد",
"Sending..." => "در حال ارسال...",
"All" => "همه",
-"User Documentation" => "مستندات کاربر",
-"Admin Documentation" => "مستند سازی مدیر",
-"Update to {appversion}" => "بهنگام شده به {appversion}",
-"Uninstall App" => "حذف برنامه",
-"Disable" => "غیرفعال",
-"Enable" => "فعال",
"Please wait...." => "لطفا صبر کنید ...",
"Error while disabling app" => "خطا در هنگام غیر فعال سازی برنامه",
+"Disable" => "غیرفعال",
+"Enable" => "فعال",
"Error while enabling app" => "خطا در هنگام فعال سازی برنامه",
"Updating...." => "در حال بروز رسانی...",
"Error while updating app" => "خطا در هنگام بهنگام سازی برنامه",
-"Error" => "خطا",
-"Update" => "به روز رسانی",
"Updated" => "بروز رسانی انجام شد",
"Uninstalling ...." => "در حال حذف...",
"Error while uninstalling app" => "خطا در هنگام حذف برنامه....",
@@ -68,7 +58,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "نام کاربری معتبر می بایست وارد شود",
"deleted {groupName}" => "گروه {groupName} حذف شد",
"undo" => "بازگشت",
-"Group Admin" => "گروه مدیران",
"never" => "هرگز",
"deleted {userName}" => "کاربر {userName} حذف شد",
"add group" => "افزودن گروه",
@@ -77,6 +66,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "رمز عبور صحیح باید وارد شود",
"Warning: Home directory for user \"{user}\" already exists" => "اخطار: پوشه‌ی خانه برای کاربر \"{user}\" در حال حاضر وجود دارد",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "گواهی های اصلی SSL ",
+"Encryption" => "رمزگذاری",
"Everything (fatal issues, errors, warnings, info, debug)" => "همه موارد (مشکلات مهلک، خطاها، اخطارها، اطلاعات، خطایابی)",
"Info, warnings, errors and fatal issues" => "اطلاعات، اخطارها، خطاها، مشکلات اساسی",
"Warnings, errors and fatal issues" => "اخطارها، خطاها، مشکلات مهلک",
@@ -119,8 +110,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "برای فعال سازی یا عدم فعال سازی اجبار استفاده از SSL، لطفاً از طریق HTTPS به %s وصل شوید.",
"Email Server" => "سرور ایمیل",
"This is used for sending out notifications." => "این برای ارسال هشدار ها استفاده می شود",
+"Send mode" => "حالت ارسال",
"From address" => "آدرس فرستنده",
"mail" => "ایمیل",
+"Authentication method" => "روش احراز هویت",
"Authentication required" => "احراز هویت مورد نیاز است",
"Server address" => "آدرس سرور",
"Port" => "درگاه",
@@ -135,14 +128,12 @@ $TRANSLATIONS = array(
"Less" => "کم‌تر",
"Version" => "نسخه",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "توسعه یافته به وسیله ی <a href=\"http://ownCloud.org/contact\" target=\"_blank\">انجمن ownCloud</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">کد اصلی</a> مجاز زیر گواهی <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "برنامه خود را بیافزایید",
-"More Apps" => "برنامه های بیشتر",
-"Select an App" => "یک برنامه انتخاب کنید",
+"by" => "با",
"Documentation:" => "مستند سازی:",
-"See application page at apps.owncloud.com" => "صفحه این اٌپ را در apps.owncloud.com ببینید",
-"See application website" => "مشاهده وب سایت برنامه",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-مجاز از طرف <span class=\"author\"></span>",
+"User Documentation" => "مستندات کاربر",
+"Admin Documentation" => "مستند سازی مدیر",
"Enable only for specific groups" => "فعال سازی تنها برای گروه های خاص",
+"Uninstall App" => "حذف برنامه",
"Administrator Documentation" => "مستندات مدیر",
"Online Documentation" => "مستندات آنلاین",
"Forum" => "انجمن",
@@ -169,7 +160,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "یک تصویر پروفایل انتخاب کنید",
"Language" => "زبان",
"Help translate" => "به ترجمه آن کمک کنید",
-"SSL root certificates" => "گواهی های اصلی SSL ",
"Import Root Certificate" => "وارد کردن گواهی اصلی",
"Log-in password" => "رمز ورود",
"Decrypt all Files" => "تمام فایلها رمزگشایی شود",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 9b09f0fbadd..e09c2d019c5 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Virheellinen arvo kohdassa %s",
-"Saved" => "Tallennettu",
-"test email settings" => "testaa sähköpostiasetukset",
-"If you received this email, the settings seem to be correct." => "Jos sait tämän sähköpostin, kaikki asetukset vaikuttavat olevan kunnossa.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset.",
-"Email sent" => "Sähköposti lähetetty",
-"You need to set your user email before being able to send test emails." => "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.",
-"Send mode" => "Lähetystila",
-"Encryption" => "Salaus",
-"Authentication method" => "Tunnistautumistapa",
-"Unable to load list from App Store" => "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)",
+"Enabled" => "Käytössä",
+"Not enabled" => "Ei käytössä",
+"Recommended" => "Suositeltu",
"Authentication error" => "Tunnistautumisvirhe",
"Your full name has been changed." => "Koko nimesi on muutettu.",
"Unable to change full name" => "Koko nimen muuttaminen epäonnistui",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Väärä ylläpitäjän salasana. Tarkista salasana ja yritä uudelleen.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Taustaosa ei tue salasanan vaihtamista, mutta käyttäjän salausavain päivitettiin onnistuneesti.",
"Unable to change password" => "Salasanan vaihto ei onnistunut",
+"Saved" => "Tallennettu",
+"test email settings" => "testaa sähköpostiasetukset",
+"If you received this email, the settings seem to be correct." => "Jos sait tämän sähköpostin, kaikki asetukset vaikuttavat olevan kunnossa.",
+"A problem occurred while sending the email. Please revise your settings." => "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset.",
+"Email sent" => "Sähköposti lähetetty",
+"You need to set your user email before being able to send test emails." => "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?",
"Add trusted domain" => "Lisää luotettu toimialue",
"Sending..." => "Lähetetään...",
"All" => "Kaikki",
-"User Documentation" => "Käyttäjäohjeistus",
-"Admin Documentation" => "Ylläpitäjän ohjeistus",
-"Update to {appversion}" => "Päivitä versioon {appversion}",
-"Uninstall App" => "Poista sovelluksen asennus",
-"Disable" => "Poista käytöstä",
-"Enable" => "Käytä",
"Please wait...." => "Odota hetki...",
"Error while disabling app" => "Virhe poistaessa sovellusta käytöstä",
+"Disable" => "Poista käytöstä",
+"Enable" => "Käytä",
"Error while enabling app" => "Virhe ottaessa sovellusta käyttöön",
"Updating...." => "Päivitetään...",
"Error while updating app" => "Virhe sovellusta päivittäessä",
-"Error" => "Virhe",
-"Update" => "Päivitä",
"Updated" => "Päivitetty",
"Uninstalling ...." => "Poistetaan asennusta....",
"Error while uninstalling app" => "Virhe sovellusta poistaessa",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Anna kelvollinen ryhmän nimi",
"deleted {groupName}" => "poistettu {groupName}",
"undo" => "kumoa",
-"Group Admin" => "Ryhmän ylläpitäjä",
+"no group" => "ei ryhmää",
"never" => "ei koskaan",
"deleted {userName}" => "poistettu {userName}",
"add group" => "lisää ryhmä",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Anna kelvollinen salasana",
"Warning: Home directory for user \"{user}\" already exists" => "Varoitus: käyttäjällä \"{user}\" on jo olemassa kotikansio",
"__language_name__" => "_kielen_nimi_",
+"Personal Info" => "Henkilökohtaiset tiedot",
+"SSL root certificates" => "SSL-juurivarmenteet",
+"Encryption" => "Salaus",
"Everything (fatal issues, errors, warnings, info, debug)" => "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)",
"Info, warnings, errors and fatal issues" => "Tiedot, varoitukset, virheet ja vakavat ongelmat",
"Warnings, errors and fatal issues" => "Varoitukset, virheet ja vakavat ongelmat",
@@ -141,13 +136,16 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Yhdistä %siin HTTPS-yhteydellä ottaaksesi käyttöön tai poistaaksesi käytöstä SSL-pakotteen.",
"Email Server" => "Sähköpostipalvelin",
"This is used for sending out notifications." => "Tätä käytetään ilmoitusten lähettämiseen.",
+"Send mode" => "Lähetystila",
"From address" => "Lähettäjän osoite",
+"Authentication method" => "Tunnistautumistapa",
"Authentication required" => "Tunnistautuminen vaaditaan",
"Server address" => "Palvelimen osoite",
"Port" => "Portti",
"Credentials" => "Tilitiedot",
"SMTP Username" => "SMTP-käyttäjätunnus",
"SMTP Password" => "SMTP-salasana",
+"Store credentials" => "Säilytä tilitiedot",
"Test email settings" => "Testaa sähköpostiasetukset",
"Send email" => "Lähetä sähköpostiviesti",
"Log" => "Loki",
@@ -156,14 +154,16 @@ $TRANSLATIONS = array(
"Less" => "Vähemmän",
"Version" => "Versio",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Kehityksestä on vastannut <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-yhteisö</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">lähdekoodi</a> on julkaistu lisenssin <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> alaisena.",
-"Add your App" => "Lisää sovelluksesi",
-"More Apps" => "Lisää sovelluksia",
-"Select an App" => "Valitse sovellus",
+"More apps" => "Lisää sovelluksia",
+"Add your app" => "Lisää sovelluksesi",
+"by" => " Kirjoittaja:",
+"licensed" => "lisensoitu",
"Documentation:" => "Ohjeistus:",
-"See application page at apps.owncloud.com" => "Katso sovellussivu osoitteessa apps.owncloud.com",
-"See application website" => "Lue lisää sovelluksen sivustolta",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lisensoija <span class=\"author\"></span>",
+"User Documentation" => "Käyttäjäohjeistus",
+"Admin Documentation" => "Ylläpitäjän ohjeistus",
+"Update to %s" => "Päivitä versioon %s",
"Enable only for specific groups" => "Salli vain tietyille ryhmille",
+"Uninstall App" => "Poista sovelluksen asennus",
"Administrator Documentation" => "Ylläpito-ohjeistus",
"Online Documentation" => "Verkko-ohjeistus",
"Forum" => "Keskustelupalsta",
@@ -193,7 +193,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Valitse profiilikuvaksi",
"Language" => "Kieli",
"Help translate" => "Auta kääntämisessä",
-"SSL root certificates" => "SSL-juurivarmenteet",
"Valid until" => "Kelvollinen",
"Issued By" => " Myöntänyt",
"Valid until %s" => "Kelvollinen %s asti",
@@ -201,6 +200,7 @@ $TRANSLATIONS = array(
"The encryption app is no longer enabled, please decrypt all your files" => "Salaussovellus ei ole enää käytössä, joten pura kaikkien tiedostojesi salaus",
"Log-in password" => "Kirjautumissalasana",
"Decrypt all Files" => "Pura kaikkien tiedostojen salaus",
+"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." => "Salausavaimesi siirretään varmuuskopiosijaintiin. Jos jokin menee pieleen, voit palauttaa avaimet. Poista avaimet pysyvästi vain, jos olet varma, että tiedostojen salaus on purettu onnistuneesti.",
"Restore Encryption Keys" => "Palauta salausavaimet",
"Delete Encryption Keys" => "Poista salausavaimet",
"Show storage location" => "Näytä tallennustilan sijainti",
@@ -218,6 +218,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Rajoittamaton",
"Other" => "Muu",
"Username" => "Käyttäjätunnus",
+"Group Admin for" => "Ryhmäylläpitäjä kohteille",
"Quota" => "Kiintiö",
"Storage Location" => "Tallennustilan sijainti",
"Last Login" => "Viimeisin kirjautuminen",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index 6c82b4e266b..56c89bc412d 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Valeur fournie pour %s non valable",
-"Saved" => "Sauvegardé",
-"test email settings" => "tester les paramètres d'e-mail",
-"If you received this email, the settings seem to be correct." => "Si vous recevez cet email, c'est que les paramètres sont corrects",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres.",
-"Email sent" => "Email envoyé",
-"You need to set your user email before being able to send test emails." => "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoyer des e-mails de test.",
-"Send mode" => "Mode d'envoi",
-"Encryption" => "Chiffrement",
-"Authentication method" => "Méthode d'authentification",
-"Unable to load list from App Store" => "Impossible de charger la liste depuis l'App Store",
+"Enabled" => "Activées",
+"Not enabled" => "Désactivées",
+"Recommended" => "Recommandées",
"Authentication error" => "Erreur d'authentification",
"Your full name has been changed." => "Votre nom complet a été modifié.",
"Unable to change full name" => "Impossible de changer le nom complet",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Mot de passe administrateur de récupération de données non valable. Veuillez vérifier le mot de passe et essayer à nouveau.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès.",
"Unable to change password" => "Impossible de modifier le mot de passe",
+"Saved" => "Sauvegardé",
+"test email settings" => "tester les paramètres d'e-mail",
+"If you received this email, the settings seem to be correct." => "Si vous recevez cet email, c'est que les paramètres sont corrects",
+"A problem occurred while sending the email. Please revise your settings." => "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres.",
+"Email sent" => "Email envoyé",
+"You need to set your user email before being able to send test emails." => "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoyer des e-mails de test.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Êtes-vous vraiment sûr de vouloir ajouter \"{domain}\" comme domaine de confiance ?",
"Add trusted domain" => "Ajouter un domaine de confiance",
"Sending..." => "Envoi en cours...",
"All" => "Tous",
-"User Documentation" => "Documentation utilisateur",
-"Admin Documentation" => "Documentation administrateur",
-"Update to {appversion}" => "Mettre à jour vers {appversion}",
-"Uninstall App" => "Désinstaller l'application",
-"Disable" => "Désactiver",
-"Enable" => "Activer",
"Please wait...." => "Veuillez patienter…",
"Error while disabling app" => "Erreur lors de la désactivation de l'application",
+"Disable" => "Désactiver",
+"Enable" => "Activer",
"Error while enabling app" => "Erreur lors de l'activation de l'application",
"Updating...." => "Mise à jour...",
"Error while updating app" => "Erreur lors de la mise à jour de l'application",
-"Error" => "Erreur",
-"Update" => "Mettre à jour",
"Updated" => "Mise à jour effectuée avec succès",
"Uninstalling ...." => "Désintallation...",
"Error while uninstalling app" => "Erreur lors de la désinstallation de l'application",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Vous devez spécifier un nom de groupe valide",
"deleted {groupName}" => "{groupName} supprimé",
"undo" => "annuler",
-"Group Admin" => "Admin Groupe",
+"no group" => "Aucun groupe",
"never" => "jamais",
"deleted {userName}" => "{userName} supprimé",
"add group" => "ajouter un groupe",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Un mot de passe valide doit être saisi",
"Warning: Home directory for user \"{user}\" already exists" => "Attention : Le dossier Home pour l'utilisateur \"{user}\" existe déjà",
"__language_name__" => "Français",
+"Personal Info" => "Informations personnelles",
+"SSL root certificates" => "Certificats racine SSL",
+"Encryption" => "Chiffrement",
"Everything (fatal issues, errors, warnings, info, debug)" => "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)",
"Info, warnings, errors and fatal issues" => "Informations, avertissements, erreurs et erreurs fatales",
"Warnings, errors and fatal issues" => "Avertissements, erreurs et erreurs fatales",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Veuillez vous connecter à cette instance %s via HTTPS pour activer ou désactiver SSL.",
"Email Server" => "Serveur mail",
"This is used for sending out notifications." => "Ceci est utilisé pour l'envoi des notifications.",
+"Send mode" => "Mode d'envoi",
"From address" => "Adresse source",
"mail" => "courriel",
+"Authentication method" => "Méthode d'authentification",
"Authentication required" => "Authentification requise",
"Server address" => "Adresse du serveur",
"Port" => "Port",
"Credentials" => "Informations d'identification",
"SMTP Username" => "Nom d'utilisateur SMTP",
"SMTP Password" => "Mot de passe SMTP",
+"Store credentials" => "Enregistrer les identifiants",
"Test email settings" => "Tester les paramètres e-mail",
"Send email" => "Envoyer un e-mail",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Moins",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Développé par la <a href=\"http://ownCloud.org/contact\" target=\"_blank\">communauté ownCloud</a>, le <a href=\"https://github.com/owncloud\" target=\"_blank\">code source</a> est publié sous license <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Ajoutez votre application",
-"More Apps" => "Plus d'applications…",
-"Select an App" => "Sélectionnez une Application",
+"More apps" => "Plus d'applications",
+"Add your app" => "Ajouter votre application",
+"by" => "par",
+"licensed" => "Sous licence",
"Documentation:" => "Documentation :",
-"See application page at apps.owncloud.com" => "Voir la page de l'application sur apps.owncloud.com",
-"See application website" => "Voir le site web de l'application",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "Distribué sous licence <span class=\"licence\"></span>, par <span class=\"author\"></span>",
+"User Documentation" => "Documentation utilisateur",
+"Admin Documentation" => "Documentation administrateur",
+"Update to %s" => "Mettre à niveau vers la version %s",
"Enable only for specific groups" => "Activer uniquement pour certains groupes",
+"Uninstall App" => "Désinstaller l'application",
"Administrator Documentation" => "Documentation administrateur",
"Online Documentation" => "Documentation en ligne",
"Forum" => "Forum",
@@ -190,7 +190,7 @@ $TRANSLATIONS = array(
"Full Name" => "Nom complet",
"Email" => "Adresse mail",
"Your email address" => "Votre adresse e-mail",
-"Fill in an email address to enable password recovery and receive notifications" => "Saisir une adresse e-mail pour permettre la réinitialisation du mot de passe et la réception des notifications",
+"Fill in an email address to enable password recovery and receive notifications" => "Saisissez votre adresse mail pour permettre la réinitialisation du mot de passe et la réception des notifications",
"Profile picture" => "Photo de profil",
"Upload new" => "Nouvelle depuis votre ordinateur",
"Select new from Files" => "Nouvelle depuis les Fichiers",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Choisir en tant que photo de profil ",
"Language" => "Langue",
"Help translate" => "Aidez à traduire",
-"SSL root certificates" => "Certificats racine SSL",
"Common Name" => "Nom d'usage",
"Valid until" => "Valide jusqu'à",
"Issued By" => "Délivré par",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Illimité",
"Other" => "Autre",
"Username" => "Nom d'utilisateur",
+"Group Admin for" => "Administrateur de groupe pour",
"Quota" => "Quota",
"Storage Location" => "Emplacement du Stockage",
"Last Login" => "Dernière Connexion",
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index 58e8f14feac..1399257d9c5 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Forneceu un valor incorrecto para %s",
-"Saved" => "Gardado",
-"test email settings" => "correo de proba dos axustes",
-"If you received this email, the settings seem to be correct." => "Se recibiu este correo, semella que a configuración é correcta.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Produciuse un problema ao enviar o correo. Revise os seus axustes.",
-"Email sent" => "Correo enviado",
-"You need to set your user email before being able to send test emails." => "É necesario configurar o correo do usuario antes de poder enviar mensaxes de correo de proba.",
-"Send mode" => "Modo de envío",
-"Encryption" => "Cifrado",
-"Authentication method" => "Método de autenticación",
-"Unable to load list from App Store" => "Non foi posíbel cargar a lista desde a App Store",
+"Enabled" => "Activado",
"Authentication error" => "Produciuse un erro de autenticación",
"Your full name has been changed." => "O seu nome completo foi cambiado",
"Unable to change full name" => "Non é posíbel cambiar o nome completo",
@@ -40,21 +30,20 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e tenteo de novo.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado dos usuarios foi actualizada correctamente.",
"Unable to change password" => "Non é posíbel cambiar o contrasinal",
+"Saved" => "Gardado",
+"test email settings" => "correo de proba dos axustes",
+"If you received this email, the settings seem to be correct." => "Se recibiu este correo, semella que a configuración é correcta.",
+"Email sent" => "Correo enviado",
+"You need to set your user email before being able to send test emails." => "É necesario configurar o correo do usuario antes de poder enviar mensaxes de correo de proba.",
"Sending..." => "Enviando...",
"All" => "Todo",
-"User Documentation" => "Documentación do usuario",
-"Admin Documentation" => "Documentación do administrador",
-"Update to {appversion}" => "Actualizar á {appversion}",
-"Uninstall App" => "Desinstalar unha aplicación",
-"Disable" => "Desactivar",
-"Enable" => "Activar",
"Please wait...." => "Agarde...",
"Error while disabling app" => "Produciuse un erro ao desactivar a aplicación",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
"Error while enabling app" => "Produciuse un erro ao activar a aplicación",
"Updating...." => "Actualizando...",
"Error while updating app" => "Produciuse un erro mentres actualizaba a aplicación",
-"Error" => "Erro",
-"Update" => "Actualizar",
"Updated" => "Actualizado",
"Uninstalling ...." => "Desinstalando ...",
"Error while uninstalling app" => "Produciuse un erro ao desinstalar o aplicatvo",
@@ -75,7 +64,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Debe fornecer un nome de grupo",
"deleted {groupName}" => "{groupName} foi eliminado",
"undo" => "desfacer",
-"Group Admin" => "Grupo Admin",
"never" => "nunca",
"deleted {userName}" => "{userName} foi eliminado",
"add group" => "engadir un grupo",
@@ -84,6 +72,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Debe fornecer un contrasinal",
"Warning: Home directory for user \"{user}\" already exists" => "Aviso: O directorio persoal para o usuario «{user}» xa existe",
"__language_name__" => "Galego",
+"SSL root certificates" => "Certificados raíz SSL",
+"Encryption" => "Cifrado",
"Everything (fatal issues, errors, warnings, info, debug)" => "Todo (problemas críticos, erros, avisos, información, depuración)",
"Info, warnings, errors and fatal issues" => "Información, avisos, erros e problemas críticos",
"Warnings, errors and fatal issues" => "Avisos, erros e problemas críticos",
@@ -143,8 +133,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Conéctese a %s empregando HTTPS para activar ou desactivar o forzado de SSL.",
"Email Server" => "Servidor de correo",
"This is used for sending out notifications." => "Isto utilizase para o envío de notificacións.",
+"Send mode" => "Modo de envío",
"From address" => "Desde o enderezo",
"mail" => "correo",
+"Authentication method" => "Método de autenticación",
"Authentication required" => "Requírese autenticación",
"Server address" => "Enderezo do servidor",
"Port" => "Porto",
@@ -159,14 +151,13 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versión",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolvido pola <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o <a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está baixo a licenza <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Engada a súa aplicación",
-"More Apps" => "Máis aplicacións",
-"Select an App" => "Escolla unha aplicación",
+"More apps" => "Máis aplicativos",
+"by" => "por",
"Documentation:" => "Documentación:",
-"See application page at apps.owncloud.com" => "Consulte a páxina da aplicación en apps.owncloud.com",
-"See application website" => "Vexa o sitio web da aplicación",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por<span class=\"author\"></span>",
+"User Documentation" => "Documentación do usuario",
+"Admin Documentation" => "Documentación do administrador",
"Enable only for specific groups" => "Activar só para grupos específicos",
+"Uninstall App" => "Desinstalar unha aplicación",
"Administrator Documentation" => "Documentación do administrador",
"Online Documentation" => "Documentación na Rede",
"Forum" => "Foro",
@@ -196,7 +187,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Escolla unha imaxe para o perfil",
"Language" => "Idioma",
"Help translate" => "Axude na tradución",
-"SSL root certificates" => "Certificados raíz SSL",
"Import Root Certificate" => "Importar o certificado raíz",
"The encryption app is no longer enabled, please decrypt all your files" => "A aplicación de cifrado non está activada, descifre todos os ficheiros",
"Log-in password" => "Contrasinal de acceso",
diff --git a/settings/l10n/he.php b/settings/l10n/he.php
index d3624c983fd..0e626c9059a 100644
--- a/settings/l10n/he.php
+++ b/settings/l10n/he.php
@@ -1,9 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "נשמר",
-"Email sent" => "הודעת הדוא״ל נשלחה",
-"Encryption" => "הצפנה",
-"Unable to load list from App Store" => "לא ניתן לטעון רשימה מה־App Store",
"Authentication error" => "שגיאת הזדהות",
"Group already exists" => "הקבוצה כבר קיימת",
"Unable to add group" => "לא ניתן להוסיף קבוצה",
@@ -17,27 +13,26 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "לא ניתן להוסיף משתמש לקבוצה %s",
"Unable to remove user from group %s" => "לא ניתן להסיר משתמש מהקבוצה %s",
"Couldn't update app." => "לא ניתן לעדכן את היישום.",
+"Saved" => "נשמר",
+"Email sent" => "הודעת הדוא״ל נשלחה",
"All" => "הכל",
-"User Documentation" => "תיעוד משתמש",
-"Update to {appversion}" => "עדכון לגרסה {appversion}",
+"Please wait...." => "נא להמתין…",
"Disable" => "בטל",
"Enable" => "הפעלה",
-"Please wait...." => "נא להמתין…",
"Updating...." => "מתבצע עדכון…",
"Error while updating app" => "אירעה שגיאה בעת עדכון היישום",
-"Error" => "שגיאה",
-"Update" => "עדכון",
"Updated" => "מעודכן",
"Delete" => "מחיקה",
"Groups" => "קבוצות",
"undo" => "ביטול",
-"Group Admin" => "מנהל הקבוצה",
"never" => "לעולם לא",
"add group" => "הוספת קבוצה",
"A valid username must be provided" => "יש לספק שם משתמש תקני",
"Error creating user" => "יצירת המשתמש נכשלה",
"A valid password must be provided" => "יש לספק ססמה תקנית",
"__language_name__" => "עברית",
+"SSL root certificates" => "שורש אישורי אבטחת SSL ",
+"Encryption" => "הצפנה",
"None" => "כלום",
"Login" => "התחברות",
"Security Warning" => "אזהרת אבטחה",
@@ -60,11 +55,9 @@ $TRANSLATIONS = array(
"Less" => "פחות",
"Version" => "גרסא",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "פותח על די <a href=\"http://ownCloud.org/contact\" target=\"_blank\">קהילתownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">קוד המקור</a> מוגן ברישיון <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "הוספת היישום שלך",
-"More Apps" => "יישומים נוספים",
-"Select an App" => "בחירת יישום",
-"See application page at apps.owncloud.com" => "צפה בעמוד הישום ב apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "ברישיון <span class=\"licence\"></span>לטובת <span class=\"author\"></span>",
+"More apps" => "יישומים נוספים",
+"by" => "על ידי",
+"User Documentation" => "תיעוד משתמש",
"Administrator Documentation" => "תיעוד מנהלים",
"Online Documentation" => "תיעוד מקוון",
"Forum" => "פורום",
@@ -85,7 +78,6 @@ $TRANSLATIONS = array(
"Cancel" => "ביטול",
"Language" => "פה",
"Help translate" => "עזרה בתרגום",
-"SSL root certificates" => "שורש אישורי אבטחת SSL ",
"Import Root Certificate" => "ייבוא אישור אבטחת שורש",
"Login Name" => "שם כניסה",
"Create" => "יצירה",
diff --git a/settings/l10n/hi.php b/settings/l10n/hi.php
index c19ac7e1018..a328b3700aa 100644
--- a/settings/l10n/hi.php
+++ b/settings/l10n/hi.php
@@ -1,8 +1,6 @@
<?php
$TRANSLATIONS = array(
"Email sent" => "ईमेल भेज दिया गया है ",
-"Error" => "त्रुटि",
-"Update" => "अद्यतन",
"Security Warning" => "सुरक्षा चेतावनी ",
"More" => "और अधिक",
"Password" => "पासवर्ड",
diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php
index 6007bbbefca..1c6e178abdd 100644
--- a/settings/l10n/hr.php
+++ b/settings/l10n/hr.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Neispravna vrijednost dostavljena za %s",
-"Saved" => "Spremljeno",
-"test email settings" => "Postavke za testiranje e-pošte",
-"If you received this email, the settings seem to be correct." => "Ako ste ovu e-poštu primili,čini se da su postavke ispravne.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Za vrijeme slanja e-pošte pojavio se problem. Molimo ponovno posjetite svoje postavke.",
-"Email sent" => "E-pošta je poslana",
-"You need to set your user email before being able to send test emails." => "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.",
-"Send mode" => "Način rada za slanje",
-"Encryption" => "Šifriranje",
-"Authentication method" => "Postupak autentikacije",
-"Unable to load list from App Store" => "Popis iz App Store-a nije moguće učitati.",
+"Enabled" => "Aktivirano",
"Authentication error" => "Pogrešna autentikacija",
"Your full name has been changed." => "Vaše puno ime je promijenjeno.",
"Unable to change full name" => "Puno ime nije moguće promijeniti.",
@@ -40,23 +30,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Pogrešna admin lozinka za oporavak. Molimo provjerite lozinku i pokušajte ponovno.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Pozadina ne podržava promjenu lozinke, ali korisnički ključ za šifriranje je uspješno ažuriran.",
"Unable to change password" => "Promjena lozinke nije moguća",
+"Saved" => "Spremljeno",
+"test email settings" => "Postavke za testiranje e-pošte",
+"If you received this email, the settings seem to be correct." => "Ako ste ovu e-poštu primili,čini se da su postavke ispravne.",
+"Email sent" => "E-pošta je poslana",
+"You need to set your user email before being able to send test emails." => "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?",
"Add trusted domain" => "Dodajte pouzdanu domenu",
"Sending..." => "Slanje...",
"All" => "Sve",
-"User Documentation" => "Korisnička dokumentacija",
-"Admin Documentation" => "Admin dokumentacija",
-"Update to {appversion}" => "Ažurirajte u {appversion}",
-"Uninstall App" => "Deinstalirajte app",
-"Disable" => "Onemogućite",
-"Enable" => "Omogućite",
"Please wait...." => "Molimo pričekajte...",
"Error while disabling app" => "Pogreška pri onemogućavanju app",
+"Disable" => "Onemogućite",
+"Enable" => "Omogućite",
"Error while enabling app" => "Pogreška pri omogućavanju app",
"Updating...." => "Ažuriranje...",
"Error while updating app" => "Pogreška pri ažuriranju app",
-"Error" => "Pogreška",
-"Update" => "Ažurirajte",
"Updated" => "Ažurirano",
"Uninstalling ...." => "Deinstaliranje....",
"Error while uninstalling app" => "Pogreška pri deinstaliranju app",
@@ -78,7 +67,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Nužno je navesti valjani naziv grupe",
"deleted {groupName}" => "izbrisana {groupName}",
"undo" => "poništite",
-"Group Admin" => "Group Admin",
"never" => "nikad",
"deleted {userName}" => "izbrisano {userName}",
"add group" => "dodajte grupu",
@@ -87,6 +75,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Nužno je navesti valjanu lozinku",
"Warning: Home directory for user \"{user}\" already exists" => "Upozorenje: Osnovni direktorij za korisnika \"{user}\" već postoji",
"__language_name__" => "__jezik_naziv___",
+"SSL root certificates" => "SSL Root certifikati",
+"Encryption" => "Šifriranje",
"Everything (fatal issues, errors, warnings, info, debug)" => "Sve (kobni problemi, pogreške, upozorenja, ispravljanje pogrešaka)",
"Info, warnings, errors and fatal issues" => "Informacije, upozorenja, pogreške i kobni problemi",
"Warnings, errors and fatal issues" => "Upozorenja, pogreške i kobni problemi",
@@ -146,8 +136,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Molimo,priključite se na svoj %s putem HTTPS da biste omogućili ili onemogućili SSL",
"Email Server" => "Poslužitelj e-pošte",
"This is used for sending out notifications." => "Ovo se koristi za slanje notifikacija.",
+"Send mode" => "Način rada za slanje",
"From address" => "S adrese",
"mail" => "pošta",
+"Authentication method" => "Postupak autentikacije",
"Authentication required" => "Potrebna autentikacija",
"Server address" => "Adresa poslužitelja",
"Port" => "Priključak",
@@ -162,14 +154,12 @@ $TRANSLATIONS = array(
"Less" => "Manje",
"Version" => "Verzija",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Razvila <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud zajednica</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">izvorni kod</a> je licenciran <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> licencom.",
-"Add your App" => "Dodajte svoje aplikacije",
-"More Apps" => "Više aplikacija",
-"Select an App" => "Odaberite jednu aplikaciju",
+"by" => "od strane",
"Documentation:" => "Dokumentacija:",
-"See application page at apps.owncloud.com" => "Vidite stranicu aplikacija na apps.owncloud.com",
-"See application website" => "Vidite web mjesto aplikacija",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencirano <span class=\"author\"></span>",
+"User Documentation" => "Korisnička dokumentacija",
+"Admin Documentation" => "Admin dokumentacija",
"Enable only for specific groups" => "Omogućite samo za specifične grupe",
+"Uninstall App" => "Deinstalirajte app",
"Administrator Documentation" => "Dokumentacija administratora",
"Online Documentation" => "Online dokumentacija",
"Forum" => "Forum",
@@ -199,7 +189,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Odaberite kao sliku profila",
"Language" => "Jezik",
"Help translate" => "Pomozite prevesti",
-"SSL root certificates" => "SSL Root certifikati",
"Common Name" => "Common Name",
"Valid until" => "Valid until",
"Issued By" => "Issued By",
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
index c0bf40f00fe..9049326a12a 100644
--- a/settings/l10n/hu_HU.php
+++ b/settings/l10n/hu_HU.php
@@ -1,16 +1,7 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Érvénytelen adatot adott meg erre: %s",
-"Saved" => "Elmentve",
-"test email settings" => "e-mail beállítások ellenőrzése",
-"If you received this email, the settings seem to be correct." => "Amennyiben megérkezett ez az e-mail akkor a beállítások megfelelők.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Hiba történt az e-mail küldésekor. Kérjük ellenőrizze a beállításokat!",
-"Email sent" => "Az e-mailt elküldtük",
-"You need to set your user email before being able to send test emails." => "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.",
-"Send mode" => "Küldési mód",
-"Encryption" => "Titkosítás",
-"Authentication method" => "A felhasználóazonosítás módszere",
-"Unable to load list from App Store" => "Nem tölthető le a lista az App Store-ból",
+"Enabled" => "Bekapcsolva",
+"Recommended" => "Ajánlott",
"Authentication error" => "Azonosítási hiba",
"Your full name has been changed." => "Az Ön teljes nevét módosítottuk.",
"Unable to change full name" => "Nem sikerült megváltoztatni a teljes nevét",
@@ -40,23 +31,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "A háttér-alrendszer nem támogatja a jelszómódosítást, de felhasználó titkosítási kulcsát sikeresen frissítettük.",
"Unable to change password" => "Nem sikerült megváltoztatni a jelszót",
+"Saved" => "Elmentve",
+"test email settings" => "e-mail beállítások ellenőrzése",
+"If you received this email, the settings seem to be correct." => "Amennyiben megérkezett ez az e-mail akkor a beállítások megfelelők.",
+"Email sent" => "Az e-mailt elküldtük",
+"You need to set your user email before being able to send test emails." => "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?",
"Add trusted domain" => "Megbízható tartomány hozzáadása",
"Sending..." => "Küldés...",
"All" => "Mind",
-"User Documentation" => "Felhasználói leírás",
-"Admin Documentation" => "Adminisztrátori leírás",
-"Update to {appversion}" => "Frissítés erre a verzióra: {appversion}",
-"Uninstall App" => "Az alkalmazás eltávolítása",
-"Disable" => "Letiltás",
-"Enable" => "Engedélyezés",
"Please wait...." => "Kérem várjon...",
"Error while disabling app" => "Hiba az alkalmazás letiltása közben",
+"Disable" => "Letiltás",
+"Enable" => "Engedélyezés",
"Error while enabling app" => "Hiba az alkalmazás engedélyezése közben",
"Updating...." => "Frissítés folyamatban...",
"Error while updating app" => "Hiba történt az alkalmazás frissítése közben",
-"Error" => "Hiba",
-"Update" => "Frissítés",
"Updated" => "Frissítve",
"Uninstalling ...." => "Eltávolítás ...",
"Error while uninstalling app" => "Hiba történt az alkalmazás eltávolítása közben",
@@ -77,7 +67,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Érvényes csoportnevet kell megadni",
"deleted {groupName}" => "törölve: {groupName}",
"undo" => "visszavonás",
-"Group Admin" => "Csoportadminisztrátor",
"never" => "soha",
"deleted {userName}" => "törölve: {userName}",
"add group" => "csoport hozzáadása",
@@ -86,6 +75,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Érvényes jelszót kell megadnia",
"Warning: Home directory for user \"{user}\" already exists" => "Figyelmeztetés: A felhasználó \"{user}\" kezdő könyvtára már létezik",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL tanúsítványok",
+"Encryption" => "Titkosítás",
"Everything (fatal issues, errors, warnings, info, debug)" => "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)",
"Info, warnings, errors and fatal issues" => "Információk, figyelmeztetések, hibák és végzetes hibák",
"Warnings, errors and fatal issues" => "Figyelmeztetések, hibák és végzetes hibák",
@@ -145,8 +136,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Kérjük, hogy HTTPS protokollon keresztül kapcsolódjon a %s rendszerhez, ha be- vagy ki akarja kapcsolni a kötelező SSL-beállítást!",
"Email Server" => "E-mail kiszolgáló",
"This is used for sending out notifications." => "Ezt használjuk a jelentések kiküldésére.",
+"Send mode" => "Küldési mód",
"From address" => "A feladó címe",
"mail" => "mail",
+"Authentication method" => "A felhasználóazonosítás módszere",
"Authentication required" => "Felhasználóazonosítás szükséges",
"Server address" => "A kiszolgáló címe",
"Port" => "Port",
@@ -161,14 +154,12 @@ $TRANSLATIONS = array(
"Less" => "Kevesebb",
"Version" => "Verzió",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "A programot az <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud közösség</a> fejleszti. A <a href=\"https://github.com/owncloud\" target=\"_blank\">forráskód</a> az <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> feltételei mellett használható föl.",
-"Add your App" => "Az alkalmazás hozzáadása",
-"More Apps" => "További alkalmazások",
-"Select an App" => "Válasszon egy alkalmazást",
+"by" => "közreadta:",
"Documentation:" => "Leírások:",
-"See application page at apps.owncloud.com" => "Lásd apps.owncloud.com, alkalmazások oldal",
-"See application website" => "Lásd az alkalmazások weboldalát",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-a jogtuladonos <span class=\"author\"></span>",
+"User Documentation" => "Felhasználói leírás",
+"Admin Documentation" => "Adminisztrátori leírás",
"Enable only for specific groups" => "Csak bizonyos csoportok számára tegyük elérhetővé",
+"Uninstall App" => "Az alkalmazás eltávolítása",
"Administrator Documentation" => "Üzemeltetői leírás",
"Online Documentation" => "Online leírás",
"Forum" => "Fórum",
@@ -198,7 +189,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Válasszuk ki profilképnek",
"Language" => "Nyelv",
"Help translate" => "Segítsen a fordításban!",
-"SSL root certificates" => "SSL tanúsítványok",
"Import Root Certificate" => "SSL tanúsítványok importálása",
"The encryption app is no longer enabled, please decrypt all your files" => "A titkosító alkalmazás a továbbiakban nincs engedélyezve, kérem állítsa vissza az állományait titkostásmentes állapotba!",
"Log-in password" => "Bejelentkezési jelszó",
diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php
index 608beddbe61..f348af78212 100644
--- a/settings/l10n/ia.php
+++ b/settings/l10n/ia.php
@@ -1,11 +1,9 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "Salveguardate",
-"Email sent" => "Message de e-posta inviate",
"Language changed" => "Linguage cambiate",
"Invalid request" => "Requesta invalide",
-"Error" => "Error",
-"Update" => "Actualisar",
+"Saved" => "Salveguardate",
+"Email sent" => "Message de e-posta inviate",
"Very weak password" => "Contrasigno multo debile",
"Weak password" => "Contrasigno debile",
"So-so password" => "Contrasigno passabile",
@@ -18,8 +16,7 @@ $TRANSLATIONS = array(
"Security Warning" => "Aviso de securitate",
"Log" => "Registro",
"More" => "Plus",
-"Add your App" => "Adder tu application",
-"Select an App" => "Selectionar un app",
+"by" => "per",
"Get the apps to sync your files" => "Obtene le apps (applicationes) pro synchronizar tu files",
"Password" => "Contrasigno",
"Unable to change your password" => "Non pote cambiar tu contrasigno",
diff --git a/settings/l10n/id.php b/settings/l10n/id.php
index f21e0fa082b..639d62b7114 100644
--- a/settings/l10n/id.php
+++ b/settings/l10n/id.php
@@ -1,24 +1,25 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "Disimpan",
-"test email settings" => "pengaturan email percobaan",
-"If you received this email, the settings seem to be correct." => "Jika Anda menerma email ini, pengaturan tampaknya sudah benar.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Terjadi masalah saat mengirim email. Mohon tinjau ulang pengaturan Anda.",
-"Email sent" => "Email terkirim",
-"You need to set your user email before being able to send test emails." => "Anda perlu menetapkan email pengguna Anda sebelum dapat mengirim email percobaan.",
-"Send mode" => "Modus kirim",
-"Encryption" => "Enkripsi",
-"Authentication method" => "Metode otentikasi",
-"Unable to load list from App Store" => "Tidak dapat memuat daftar dari App Store",
-"Authentication error" => "Galat saat autentikasi",
+"Enabled" => "Diaktifkan",
+"Not enabled" => "Tidak diaktifkan",
+"Recommended" => "Direkomendasikan",
+"Authentication error" => "Terjadi kesalahan saat otentikasi",
"Your full name has been changed." => "Nama lengkap Anda telah diubah",
"Unable to change full name" => "Tidak dapat mengubah nama lengkap",
"Group already exists" => "Grup sudah ada",
"Unable to add group" => "Tidak dapat menambah grup",
+"Files decrypted successfully" => "Berkas berhasil dideskripsi",
+"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" => "Tidak dapat mendeskripsi berkas Anda, mohon periksa owncloud.log Anda atau tanyakan pada administrator Anda",
+"Couldn't decrypt your files, check your password and try again" => "Tidak dapat mendeskripsi berkas Anda, periksa sandi Anda dan coba lagi",
+"Encryption keys deleted permanently" => "Kunci enkripsi dihapus secara permanen",
+"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" => "Tidak dapat menghapus kunci enkripsi anda secara permanen, mohon periksa owncloud.log atau tanyakan pada administrator Anda",
+"Couldn't remove app." => "Tidak dapat menghapus aplikasi.",
"Email saved" => "Email disimpan",
"Invalid email" => "Email tidak valid",
"Unable to delete group" => "Tidak dapat menghapus grup",
"Unable to delete user" => "Tidak dapat menghapus pengguna",
+"Backups restored successfully" => "Cadangan berhasil dipulihkan",
+"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" => "Tidak dapat memulihkan kunci enkripsi Anda, mohon periksa owncloud.log Anda atau tanyakan pada administrator Anda.",
"Language changed" => "Bahasa telah diubah",
"Invalid request" => "Permintaan tidak valid",
"Admins can't remove themself from the admin group" => "Admin tidak dapat menghapus dirinya sendiri dari grup admin",
@@ -27,42 +28,60 @@ $TRANSLATIONS = array(
"Couldn't update app." => "Tidak dapat memperbarui aplikasi.",
"Wrong password" => "Sandi salah",
"No user supplied" => "Tidak ada pengguna yang diberikan",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Mohon sediakan sandi pemulihan admin, jika tidak semua data pengguna akan terhapus",
"Wrong admin recovery password. Please check the password and try again." => "Sandi pemulihan admin salah. Periksa sandi dan ulangi kembali.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end tidak mendukung perubahan password, tetapi kunci enkripsi pengguna berhasil diperbarui.",
"Unable to change password" => "Tidak dapat mengubah sandi",
+"Saved" => "Disimpan",
+"test email settings" => "pengaturan email percobaan",
+"If you received this email, the settings seem to be correct." => "Jika Anda menerma email ini, pengaturan tampaknya sudah benar.",
+"A problem occurred while sending the email. Please revise your settings." => "Muncul masalah tidak terduga saat mengirim email. Mohon merevisi pengaturan Anda.",
+"Email sent" => "Email terkirim",
+"You need to set your user email before being able to send test emails." => "Anda perlu menetapkan email pengguna Anda sebelum dapat mengirim email percobaan.",
+"Are you really sure you want add \"{domain}\" as trusted domain?" => "Apakah And yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?",
+"Add trusted domain" => "Tambah domain terpercaya",
"Sending..." => "Mengirim",
"All" => "Semua",
-"User Documentation" => "Dokumentasi Pengguna",
-"Admin Documentation" => "Dokumentasi Admin",
-"Update to {appversion}" => "Perbarui ke {appversion}",
+"Please wait...." => "Mohon tunggu....",
+"Error while disabling app" => "Terjadi kesalahan saat menonaktifkan aplikasi",
"Disable" => "Nonaktifkan",
"Enable" => "Aktifkan",
-"Please wait...." => "Mohon tunggu....",
-"Error while disabling app" => "Galat saat menonaktifkan aplikasi",
-"Error while enabling app" => "Galat saat mengakifkan aplikasi",
+"Error while enabling app" => "Terjadi kesalahan saat mengakifkan aplikasi",
"Updating...." => "Memperbarui....",
-"Error while updating app" => "Gagal ketika memperbarui aplikasi",
-"Error" => "Galat",
-"Update" => "Perbarui",
+"Error while updating app" => "Terjadi kesalahan saat memperbarui aplikasi",
"Updated" => "Diperbarui",
+"Uninstalling ...." => "Mencopot ...",
+"Error while uninstalling app" => "Terjadi kesalahan saat mencopot aplikasi",
+"Uninstall" => "Copot",
"Select a profile picture" => "Pilih foto profil",
"Very weak password" => "Sandi sangat lemah",
"Weak password" => "Sandi lemah",
"So-so password" => "Sandi lumayan",
"Good password" => "Sandi baik",
"Strong password" => "Sandi kuat",
+"Valid until {date}" => "Berlaku sampai {date}",
"Delete" => "Hapus",
-"Decrypting files... Please wait, this can take some time." => "Mendeskripsi berkas... Modon tunggu, ini memerlukan beberapa saat.",
+"Decrypting files... Please wait, this can take some time." => "Mendeskripsi berkas... Mohon tunggu, ini memerlukan beberapa saat.",
+"Delete encryption keys permanently." => "Hapus kunci enkripsi secara permanen.",
+"Restore encryption keys." => "memulihkan kunci enkripsi.",
"Groups" => "Grup",
+"Unable to delete {objName}" => "Tidak dapat menghapus {objName}",
+"Error creating group" => "Terjadi kesalahan saat membuat grup",
+"A valid group name must be provided" => "Harus memberikan nama grup yang benar.",
+"deleted {groupName}" => "menghapus {groupName}",
"undo" => "urungkan",
-"Group Admin" => "Admin Grup",
+"no group" => "tanpa grup",
"never" => "tidak pernah",
+"deleted {userName}" => "menghapus {userName}",
"add group" => "tambah grup",
-"A valid username must be provided" => "Tuliskan nama pengguna yang valid",
-"Error creating user" => "Gagal membuat pengguna",
-"A valid password must be provided" => "Tuliskan sandi yang valid",
+"A valid username must be provided" => "Harus memberikan nama pengguna yang benar",
+"Error creating user" => "Terjadi kesalahan saat membuat pengguna",
+"A valid password must be provided" => "Harus memberikan sandi yang benar",
"Warning: Home directory for user \"{user}\" already exists" => "Peringatan: Direktori home untuk pengguna \"{user}\" sudah ada",
"__language_name__" => "__language_name__",
+"Personal Info" => "Info Pribadi",
+"SSL root certificates" => "Sertifikat root SSL",
+"Encryption" => "Enkripsi",
"Everything (fatal issues, errors, warnings, info, debug)" => "Semuanya (Masalah fatal, galat, peringatan, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, peringatan, galat dan masalah fatal",
"Warnings, errors and fatal issues" => "Peringatan, galat dan masalah fatal",
@@ -77,58 +96,89 @@ $TRANSLATIONS = array(
"Security Warning" => "Peringatan Keamanan",
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." => "Anda mengakses %s melalui HTTP. Kami sangat menyarankan Anda untuk mengkonfigurasi server dengan menggunakan HTTPS sebagai gantinya.",
"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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Direktori data dan berkas Anda mungkin dapat diakses dari internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan untuk mengkonfigurasi server web Anda agar direktori data tidak lagi dapat diakses atau Anda dapat memindahkan direktori data di luar dokumen root webserver.",
-"Setup Warning" => "Peringatan Persiapan",
-"Module 'fileinfo' missing" => "Module 'fileinfo' tidak ada",
+"Setup Warning" => "Peringatan Pengaturan",
+"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." => "Tampaknya pengaturan PHP strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.",
+"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." => "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.",
+"Database Performance Info" => "Info Performa Basis Data",
+"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" => "SQLite akan digunakan sebagai basis data. Untuk instalasi besar, kami merekomendasikan untuk mengubahnya. Untuk berpindah ke basis data lainnya, gunakan alat baris perintah: 'occ db:convert-type'",
+"Module 'fileinfo' missing" => "Modul 'fileinfo' tidak ada",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.",
"Your PHP version is outdated" => "Versi PHP telah usang",
"Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." => "Versi PHP telah usang. Kami sangat menyarankan untuk diperbarui ke versi 5.3.8 atau yang lebih baru karena versi lama diketahui rusak. Ada kemungkinan bahwa instalasi ini tidak bekerja dengan benar.",
+"PHP charset is not set to UTF-8" => "Charset PHP tidak disetel ke UTF-8",
+"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." => "Charset PHP tidak disetel ke UTF-8. Hal ini dapat menyebabkan masalah besar dengan karakter non-ASCII di nama berkas. Kami sangat merekomendasikan untuk mengubah nilai 'default_charset' php.ini ke 'UTF-8'.",
"Locale not working" => "Kode pelokalan tidak berfungsi",
"System locale can not be set to a one which supports UTF-8." => "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.",
"This means that there might be problems with certain characters in file names." => "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.",
"We strongly suggest to install the required packages on your system to support one of the following locales: %s." => "Kami sangat menyarankan untuk menginstal paket yang dibutuhkan pada sistem agar mendukung salah satu bahasa berikut: %s.",
+"URL generation in notification emails" => "URL dibuat dalam email pemberitahuan",
+"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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" => "Jika instalasi Anda tidak terinstal didalam root domain dan menggunakan cron sistem, ini dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah ini, mohon atur opsi \"overwritewebroot\" didalam berkas config.php ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")",
+"Connectivity checks" => "Pemeriksaan konektivitas",
+"No problems found" => "Masalah tidak ditemukan",
"Please double check the <a href='%s'>installation guides</a>." => "Silakan periksa ulang <a href='%s'>panduan instalasi</a>.",
"Cron" => "Cron",
"Last cron was executed at %s." => "Cron terakhir dieksekusi pada %s.",
+"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Cron terakhir dieksekusi pada %s. Hal ini lebih dari sejam yang lalu, ada sesuatu yang salah.",
+"Cron was not executed yet!" => "Cron masih belum dieksekusi!",
"Execute one task with each page loaded" => "Jalankan tugas setiap kali halaman dimuat",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.",
+"Use system's cron service to call the cron.php file every 15 minutes." => "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.",
"Sharing" => "Berbagi",
"Allow apps to use the Share API" => "Izinkan aplikasi untuk menggunakan API Pembagian",
+"Allow users to share via link" => "Izinkan pengguna untuk membagikan via tautan",
+"Enforce password protection" => "Berlakukan perlindungan sandi",
"Allow public uploads" => "Izinkan unggahan publik",
+"Set default expiration date" => "Atur tanggal kadaluarsa default",
+"Expire after " => "Kadaluarsa setelah",
+"days" => "hari",
+"Enforce expiration date" => "Berlakukan tanggal kadaluarsa",
"Allow resharing" => "Izinkan pembagian ulang",
+"Restrict users to only share with users in their groups" => "Batasi pengguna untuk hanya membagikan dengan pengguna didalam grup mereka",
+"Allow users to send mail notification for shared files" => "Izinkan pengguna untuk mengirimkan email pemberitahuan untuk berkas berbagi",
+"Exclude groups from sharing" => "Tidak termasuk grup untuk berbagi",
+"These groups will still be able to receive shares, but not to initiate them." => "Grup ini akan tetap dapat menerima berbagi, tatapi tidak dapat membagikan.",
"Security" => "Keamanan",
"Enforce HTTPS" => "Selalu Gunakan HTTPS",
"Forces the clients to connect to %s via an encrypted connection." => "Memaksa klien untuk menghubungkan ke %s menggunakan sambungan yang dienskripsi.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Mohon sambungkan ke %s menggunakan HTTPS untuk mengaktifkannya atau menonaktifkan penegakan SSL.",
"Email Server" => "Server Email",
"This is used for sending out notifications." => "Ini digunakan untuk mengirim notifikasi keluar.",
+"Send mode" => "Modus kirim",
"From address" => "Dari alamat",
+"mail" => "email",
+"Authentication method" => "Metode otentikasi",
"Authentication required" => "Diperlukan otentikasi",
"Server address" => "Alamat server",
"Port" => "port",
"Credentials" => "Kredensial",
"SMTP Username" => "Nama pengguna SMTP",
"SMTP Password" => "Sandi SMTP",
+"Store credentials" => "Simpan kredensial",
"Test email settings" => "Pengaturan email percobaan",
"Send email" => "Kirim email",
-"Log" => "Catat",
-"Log level" => "Level pencatatan",
+"Log" => "Log",
+"Log level" => "Level log",
"More" => "Lainnya",
"Less" => "Ciutkan",
"Version" => "Versi",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Dikembangkan oleh <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komunitas ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">kode sumber</a> dilisensikan di bawah <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Tambahkan Aplikasi Anda",
-"More Apps" => "Aplikasi Lainnya",
-"Select an App" => "Pilih Aplikasi",
+"More apps" => "Lebih banyak aplikasi",
+"Add your app" => "Tambah aplikasi Anda",
+"by" => "oleh",
+"licensed" => "dilisensikan",
"Documentation:" => "Dokumentasi:",
-"See application page at apps.owncloud.com" => "Lihat halaman aplikasi di apps.owncloud.com",
-"See application website" => "Kunjungi situs web aplikasi",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-dilisensikan oleh <span class=\"author\"></span>",
+"User Documentation" => "Dokumentasi Pengguna",
+"Admin Documentation" => "Dokumentasi Admin",
+"Update to %s" => "Perbarui ke %s",
+"Enable only for specific groups" => "Aktifkan hanya untuk grup tertentu",
+"Uninstall App" => "Copot aplikasi",
"Administrator Documentation" => "Dokumentasi Administrator",
"Online Documentation" => "Dokumentasi Online",
"Forum" => "Forum",
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Dukungan Komersial",
"Get the apps to sync your files" => "Dapatkan aplikasi untuk sinkronisasi berkas Anda",
+"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" => "Jika Anda ingin mendukung proyek ini\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">bergabung dengan pembagunan</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">sebarkan promosi</a>!",
"Show First Run Wizard again" => "Tampilkan Penuntun Konfigurasi Awal",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Anda telah menggunakan <strong>%s</strong> dari total <strong>%s</strong>",
"Password" => "Sandi",
@@ -145,30 +195,45 @@ $TRANSLATIONS = array(
"Upload new" => "Unggah baru",
"Select new from Files" => "Pilih baru dari Berkas",
"Remove image" => "Hapus gambar",
-"Either png or jpg. Ideally square but you will be able to crop it." => "Bisa png atau jpg. Idealnya berbentuk persegi tetapi jika tidak Anda bisa memotongnya nanti.",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Boleh png atau jpg. Idealnya berbentuk persegi tetapi jika tidak, Anda bisa memotongnya nanti.",
"Your avatar is provided by your original account." => "Avatar disediakan oleh akun asli Anda.",
"Cancel" => "Batal",
"Choose as profile image" => "Pilih sebagai gambar profil",
"Language" => "Bahasa",
"Help translate" => "Bantu menerjemahkan",
-"SSL root certificates" => "Sertifikat root SSL",
+"Common Name" => "Nama umum",
+"Valid until" => "Berlaku sampai",
+"Issued By" => "Diterbitkan oleh",
+"Valid until %s" => "Berlaku sampai %s",
"Import Root Certificate" => "Impor Sertifikat Root",
"The encryption app is no longer enabled, please decrypt all your files" => "Aplikasi enkripsi tidak lagi diaktifkan, silahkan mendekripsi semua file Anda",
"Log-in password" => "Sandi masuk",
"Decrypt all Files" => "Deskripsi semua Berkas",
+"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." => "Kunci enkripsi Anda dipindahkan ke lokasi cadangan. Jika terjadi sesuatu yang tidak beres, Anda dapat memulihkan kunci. Hanya menghapusnya secara permanen jika Anda yakin bahwa semua berkas telah didekripsi dengan benar.",
+"Restore Encryption Keys" => "Pulihkan Kunci Enkripsi",
+"Delete Encryption Keys" => "Hapus Kuncu Enkripsi",
+"Show storage location" => "Tampilkan kolasi penyimpanan",
+"Show last log in" => "Tampilkan masuk terakhir",
"Login Name" => "Nama Masuk",
"Create" => "Buat",
"Admin Recovery Password" => "Sandi pemulihan Admin",
"Enter the recovery password in order to recover the users files during password change" => "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi",
+"Search Users and Groups" => "Telusuri Pengguna dan Grup",
+"Add Group" => "Tambah Grup",
"Group" => "Grup",
+"Everyone" => "Semua orang",
+"Admins" => "Admin",
"Default Quota" => "Kuota default",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "Silakan masukkan jumlah penyimpanan (contoh: \"512 MB\" atau \"12 GB\")",
"Unlimited" => "Tak terbatas",
"Other" => "Lainnya",
"Username" => "Nama pengguna",
+"Group Admin for" => "Grup Admin untuk",
"Quota" => "Quota",
+"Storage Location" => "Lokasi Penyimpanan",
+"Last Login" => "Masuk Terakhir",
"change full name" => "ubah nama lengkap",
"set new password" => "setel sandi baru",
-"Default" => "Baku"
+"Default" => "Default"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/settings/l10n/is.php b/settings/l10n/is.php
index dc82b74006f..45f15f8dab3 100644
--- a/settings/l10n/is.php
+++ b/settings/l10n/is.php
@@ -1,8 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Tölvupóstur sendur",
-"Encryption" => "Dulkóðun",
-"Unable to load list from App Store" => "Ekki tókst að hlaða lista frá forrita síðu",
"Authentication error" => "Villa við auðkenningu",
"Group already exists" => "Hópur er þegar til",
"Unable to add group" => "Ekki tókst að bæta við hóp",
@@ -15,20 +12,19 @@ $TRANSLATIONS = array(
"Admins can't remove themself from the admin group" => "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp",
"Unable to add user to group %s" => "Ekki tókst að bæta notenda við hópinn %s",
"Unable to remove user from group %s" => "Ekki tókst að fjarlægja notanda úr hópnum %s",
-"User Documentation" => "Notenda handbók",
+"Email sent" => "Tölvupóstur sendur",
+"Please wait...." => "Andartak....",
"Disable" => "Gera óvirkt",
"Enable" => "Virkja",
-"Please wait...." => "Andartak....",
"Updating...." => "Uppfæri...",
-"Error" => "Villa",
-"Update" => "Uppfæra",
"Updated" => "Uppfært",
"Delete" => "Eyða",
"Groups" => "Hópar",
"undo" => "afturkalla",
-"Group Admin" => "Hópstjóri",
"never" => "aldrei",
"__language_name__" => "__nafn_tungumáls__",
+"SSL root certificates" => "SSL rótar skilríki",
+"Encryption" => "Dulkóðun",
"None" => "Ekkert",
"Security Warning" => "Öryggis aðvörun",
"Server address" => "Host nafn netþjóns",
@@ -36,11 +32,8 @@ $TRANSLATIONS = array(
"Less" => "Minna",
"Version" => "Útgáfa",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Þróað af <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud samfélaginu</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">forrita kóðinn</a> er skráðu með <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Bæta við forriti",
-"More Apps" => "Fleiri forrit",
-"Select an App" => "Veldu forrit",
-"See application page at apps.owncloud.com" => "Skoða síðu forrits hjá apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-leyfi skráð af <span class=\"author\"></span>",
+"by" => "af",
+"User Documentation" => "Notenda handbók",
"Administrator Documentation" => "Stjórnenda handbók",
"Online Documentation" => "Handbók á netinu",
"Forum" => "Vefspjall",
@@ -58,7 +51,6 @@ $TRANSLATIONS = array(
"Cancel" => "Hætta við",
"Language" => "Tungumál",
"Help translate" => "Hjálpa við þýðingu",
-"SSL root certificates" => "SSL rótar skilríki",
"Import Root Certificate" => "Flytja inn rótar skilríki",
"Create" => "Búa til",
"Unlimited" => "Ótakmarkað",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index d7cb337f41a..727017740ae 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Valore non valido fornito per %s",
-"Saved" => "Salvato",
-"test email settings" => "prova impostazioni email",
-"If you received this email, the settings seem to be correct." => "Se hai ricevuto questa email, le impostazioni dovrebbero essere corrette.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni.",
-"Email sent" => "Email inviata",
-"You need to set your user email before being able to send test emails." => "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
-"Send mode" => "Modalità di invio",
-"Encryption" => "Cifratura",
-"Authentication method" => "Metodo di autenticazione",
-"Unable to load list from App Store" => "Impossibile caricare l'elenco dall'App Store",
+"Enabled" => "Abilitata",
+"Not enabled" => "Non abilitata",
+"Recommended" => "Consigliata",
"Authentication error" => "Errore di autenticazione",
"Your full name has been changed." => "Il tuo nome completo è stato cambiato.",
"Unable to change full name" => "Impossibile cambiare il nome completo",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Password amministrativa di ripristino errata. Controlla la password e prova ancora.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata correttamente.",
"Unable to change password" => "Impossibile cambiare la password",
+"Saved" => "Salvato",
+"test email settings" => "prova impostazioni email",
+"If you received this email, the settings seem to be correct." => "Se hai ricevuto questa email, le impostazioni dovrebbero essere corrette.",
+"A problem occurred while sending the email. Please revise your settings." => "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni.",
+"Email sent" => "Email inviata",
+"You need to set your user email before being able to send test emails." => "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?",
"Add trusted domain" => "Aggiungi dominio attendibile",
"Sending..." => "Invio in corso...",
"All" => "Tutti",
-"User Documentation" => "Documentazione utente",
-"Admin Documentation" => "Documentazione di amministrazione",
-"Update to {appversion}" => "Aggiorna a {appversion}",
-"Uninstall App" => "Disinstalla applicazione",
-"Disable" => "Disabilita",
-"Enable" => "Abilita",
"Please wait...." => "Attendere...",
"Error while disabling app" => "Errore durante la disattivazione",
+"Disable" => "Disabilita",
+"Enable" => "Abilita",
"Error while enabling app" => "Errore durante l'attivazione",
"Updating...." => "Aggiornamento in corso...",
"Error while updating app" => "Errore durante l'aggiornamento",
-"Error" => "Errore",
-"Update" => "Aggiorna",
"Updated" => "Aggiornato",
"Uninstalling ...." => "Disinstallazione...",
"Error while uninstalling app" => "Errore durante la disinstallazione dell'applicazione",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Deve essere fornito un nome valido per il gruppo",
"deleted {groupName}" => "{groupName} eliminato",
"undo" => "annulla",
-"Group Admin" => "Gruppi amministrati",
+"no group" => "nessun gruppo",
"never" => "mai",
"deleted {userName}" => "{userName} eliminato",
"add group" => "aggiungi gruppo",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Deve essere fornita una password valida",
"Warning: Home directory for user \"{user}\" already exists" => "Avviso: la cartella home dell'utente \"{user}\" esiste già",
"__language_name__" => "Italiano",
+"Personal Info" => "Informazioni personali",
+"SSL root certificates" => "Certificati SSL radice",
+"Encryption" => "Cifratura",
"Everything (fatal issues, errors, warnings, info, debug)" => "Tutto (problemi gravi, errori, avvisi, informazioni, debug)",
"Info, warnings, errors and fatal issues" => "Informazioni, avvisi, errori e problemi gravi",
"Warnings, errors and fatal issues" => "Avvisi, errori e problemi gravi",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Connettiti al tuo %s tramite HTTPS per abilitare o disabilitare l'applicazione di SSL.",
"Email Server" => "Server di posta",
"This is used for sending out notifications." => "Viene utilizzato per inviare le notifiche.",
+"Send mode" => "Modalità di invio",
"From address" => "Indirizzo mittente",
"mail" => "posta",
+"Authentication method" => "Metodo di autenticazione",
"Authentication required" => "Autenticazione richiesta",
"Server address" => "Indirizzo del server",
"Port" => "Porta",
"Credentials" => "Credenziali",
"SMTP Username" => "Nome utente SMTP",
"SMTP Password" => "Password SMTP",
+"Store credentials" => "Memorizza le credenziali",
"Test email settings" => "Prova impostazioni email",
"Send email" => "Invia email",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Meno",
"Version" => "Versione",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Sviluppato dalla <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunità di ownCloud</a>, il <a href=\"https://github.com/owncloud\" target=\"_blank\">codice sorgente</a> è rilasciato nei termini della licenza <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Aggiungi la tua applicazione",
-"More Apps" => "Altre applicazioni",
-"Select an App" => "Seleziona un'applicazione",
+"More apps" => "Altre applicazioni",
+"Add your app" => "Aggiungi la tua applicazione",
+"by" => "di",
+"licensed" => "sotto licenza",
"Documentation:" => "Documentazione:",
-"See application page at apps.owncloud.com" => "Vedere la pagina dell'applicazione su apps.owncloud.com",
-"See application website" => "Visita il sito web dell'applicazione",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenziato da <span class=\"author\"></span>",
+"User Documentation" => "Documentazione utente",
+"Admin Documentation" => "Documentazione di amministrazione",
+"Update to %s" => "Aggiornato a %s",
"Enable only for specific groups" => "Abilita solo per gruppi specifici",
+"Uninstall App" => "Disinstalla applicazione",
"Administrator Documentation" => "Documentazione amministratore",
"Online Documentation" => "Documentazione in linea",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Scegli come immagine del profilo",
"Language" => "Lingua",
"Help translate" => "Migliora la traduzione",
-"SSL root certificates" => "Certificati SSL radice",
"Common Name" => "Nome comune",
"Valid until" => "Valido fino al",
"Issued By" => "Emesso da",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Illimitata",
"Other" => "Altro",
"Username" => "Nome utente",
+"Group Admin for" => "Gruppo di amministrazione per",
"Quota" => "Quote",
"Storage Location" => "Posizione di archiviazione",
"Last Login" => "Ultimo accesso",
diff --git a/settings/l10n/ja.php b/settings/l10n/ja.php
index a9b02663797..8d0770a1745 100644
--- a/settings/l10n/ja.php
+++ b/settings/l10n/ja.php
@@ -1,16 +1,7 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "%s に提供された無効な値",
-"Saved" => "保存されました",
-"test email settings" => "メール設定をテスト",
-"If you received this email, the settings seem to be correct." => "このメールを受け取ったら、設定は正しいはずです。",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "メールの送信中に問題が発生しました。設定を再考してください。",
-"Email sent" => "メールを送信しました",
-"You need to set your user email before being able to send test emails." => "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。",
-"Send mode" => "送信モード",
-"Encryption" => "暗号化",
-"Authentication method" => "認証方法",
-"Unable to load list from App Store" => "アプリストアからリストをロードできません",
+"Enabled" => "有効",
+"Recommended" => "推奨",
"Authentication error" => "認証エラー",
"Your full name has been changed." => "名前を変更しました。",
"Unable to change full name" => "名前を変更できません",
@@ -40,23 +31,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "バックエンドはパスワード変更をサポートしていませんが、ユーザーの暗号化キーは正常に更新されました。",
"Unable to change password" => "パスワードを変更できません",
+"Saved" => "保存されました",
+"test email settings" => "メール設定のテスト",
+"If you received this email, the settings seem to be correct." => "このメールを受け取ったら、設定は正しいはずです。",
+"Email sent" => "メールを送信しました",
+"You need to set your user email before being able to send test emails." => "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "\"{domain}\" を信頼するドメインに追加してもよろしいでしょうか?",
"Add trusted domain" => "信頼するドメイン名に追加",
"Sending..." => "送信中…",
"All" => "すべて",
-"User Documentation" => "ユーザードキュメント",
-"Admin Documentation" => "管理者ドキュメント",
-"Update to {appversion}" => "{appversion} にアップデート",
-"Uninstall App" => "アプリをアンインストール",
-"Disable" => "無効",
-"Enable" => "有効にする",
"Please wait...." => "しばらくお待ちください。",
"Error while disabling app" => "アプリ無効化中にエラーが発生",
+"Disable" => "無効",
+"Enable" => "有効にする",
"Error while enabling app" => "アプリを有効にする際にエラーが発生",
"Updating...." => "更新中....",
"Error while updating app" => "アプリの更新中にエラーが発生",
-"Error" => "エラー",
-"Update" => "アップデート",
"Updated" => "アップデート済み",
"Uninstalling ...." => "アンインストール中 ....",
"Error while uninstalling app" => "アプリをアンインストール中にエラーが発生",
@@ -78,7 +68,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "有効なグループ名を指定する必要があります",
"deleted {groupName}" => "{groupName} を削除しました",
"undo" => "元に戻す",
-"Group Admin" => "グループ管理者",
"never" => "なし",
"deleted {userName}" => "{userName} を削除しました",
"add group" => "グループを追加",
@@ -87,6 +76,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "有効なパスワードを指定する必要があります",
"Warning: Home directory for user \"{user}\" already exists" => "警告: ユーザー \"{user}\" のホームディレクトリはすでに存在します",
"__language_name__" => "Japanese (日本語)",
+"SSL root certificates" => "SSLルート証明書",
+"Encryption" => "暗号化",
"Everything (fatal issues, errors, warnings, info, debug)" => "すべて (致命的な問題、エラー、警告、情報、デバッグ)",
"Info, warnings, errors and fatal issues" => "情報、警告、エラー、致命的な問題",
"Warnings, errors and fatal issues" => "警告、エラー、致命的な問題",
@@ -147,16 +138,18 @@ $TRANSLATIONS = array(
"Forces the clients to connect to %s via an encrypted connection." => "クライアントから %sへの接続を常に暗号化します。",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "強制的なSSL接続を有効/無効にするには、HTTPS経由で %s へ接続してください。",
"Email Server" => "メールサーバー",
-"This is used for sending out notifications." => "これは通知の送信に使われます。",
+"This is used for sending out notifications." => "通知を送信する際に使用します。",
+"Send mode" => "送信モード",
"From address" => "送信元アドレス",
"mail" => "メール",
+"Authentication method" => "認証方法",
"Authentication required" => "認証を必要とする",
"Server address" => "サーバーアドレス",
"Port" => "ポート",
"Credentials" => "資格情報",
"SMTP Username" => "SMTP ユーザー名",
"SMTP Password" => "SMTP パスワード",
-"Test email settings" => "メール設定をテスト",
+"Test email settings" => "メール設定のテスト",
"Send email" => "メールを送信",
"Log" => "ログ",
"Log level" => "ログレベル",
@@ -164,14 +157,13 @@ $TRANSLATIONS = array(
"Less" => "閉じる",
"Version" => "バージョン",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud コミュニティ</a>により開発されています。 <a href=\"https://github.com/owncloud\" target=\"_blank\">ソースコード</a>は、<a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> ライセンスの下で提供されています。",
-"Add your App" => "アプリを追加",
-"More Apps" => "さらにアプリを表示",
-"Select an App" => "アプリを選択してください",
+"More apps" => "他のアプリ",
+"by" => "により",
"Documentation:" => "ドキュメント:",
-"See application page at apps.owncloud.com" => "apps.owncloud.com でアプリケーションのページを見てください",
-"See application website" => "アプリケーションのウェブサイトを見る",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ライセンス: <span class=\"author\"></span>",
+"User Documentation" => "ユーザードキュメント",
+"Admin Documentation" => "管理者ドキュメント",
"Enable only for specific groups" => "特定のグループのみ有効に",
+"Uninstall App" => "アプリをアンインストール",
"Administrator Documentation" => "管理者ドキュメント",
"Online Documentation" => "オンラインドキュメント",
"Forum" => "フォーラム",
@@ -201,7 +193,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "プロファイル画像として選択",
"Language" => "言語",
"Help translate" => "翻訳に協力する",
-"SSL root certificates" => "SSLルート証明書",
"Common Name" => "コモンネーム",
"Valid until" => "有効期限",
"Issued By" => "発行元",
diff --git a/settings/l10n/ka_GE.php b/settings/l10n/ka_GE.php
index 5637b417956..3e2a50a6fdf 100644
--- a/settings/l10n/ka_GE.php
+++ b/settings/l10n/ka_GE.php
@@ -1,8 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "იმეილი გაიგზავნა",
-"Encryption" => "ენკრიპცია",
-"Unable to load list from App Store" => "აპლიკაციების სია ვერ ჩამოიტვირთა App Store",
"Authentication error" => "ავთენტიფიკაციის შეცდომა",
"Group already exists" => "ჯგუფი უკვე არსებობს",
"Unable to add group" => "ჯგუფის დამატება ვერ მოხერხდა",
@@ -16,27 +13,25 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s",
"Unable to remove user from group %s" => "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s",
"Couldn't update app." => "ვერ მოხერხდა აპლიკაციის განახლება.",
+"Email sent" => "იმეილი გაიგზავნა",
"All" => "ყველა",
-"User Documentation" => "მომხმარებლის დოკუმენტაცია",
-"Update to {appversion}" => "განაახლე {appversion}–მდე",
+"Please wait...." => "დაიცადეთ....",
"Disable" => "გამორთვა",
"Enable" => "ჩართვა",
-"Please wait...." => "დაიცადეთ....",
"Updating...." => "მიმდინარეობს განახლება....",
"Error while updating app" => "შეცდომა აპლიკაციის განახლების დროს",
-"Error" => "შეცდომა",
-"Update" => "განახლება",
"Updated" => "განახლებულია",
"Delete" => "წაშლა",
"Groups" => "ჯგუფები",
"undo" => "დაბრუნება",
-"Group Admin" => "ჯგუფის ადმინისტრატორი",
"never" => "არასდროს",
"add group" => "ჯგუფის დამატება",
"A valid username must be provided" => "უნდა მიუთითოთ არსებული მომხმარებლის სახელი",
"Error creating user" => "შეცდომა მომხმარებლის შექმნისას",
"A valid password must be provided" => "უნდა მიუთითოთ არსებული პაროლი",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL root სერთიფიკატები",
+"Encryption" => "ენკრიპცია",
"None" => "არა",
"Login" => "ლოგინი",
"Security Warning" => "უსაფრთხოების გაფრთხილება",
@@ -61,11 +56,8 @@ $TRANSLATIONS = array(
"Less" => "უფრო ნაკლები",
"Version" => "ვერსია",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "წარმოებულია <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>–ის მიერ. <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> ვრცელდება <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> ლიცენზიის ფარგლებში.",
-"Add your App" => "დაამატე შენი აპლიკაცია",
-"More Apps" => "უფრო მეტი აპლიკაციები",
-"Select an App" => "აირჩიეთ აპლიკაცია",
-"See application page at apps.owncloud.com" => "ნახეთ აპლიკაციის გვერდი apps.owncloud.com –ზე",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ლიცენსირებულია <span class=\"author\"></span>",
+"by" => "მიერ",
+"User Documentation" => "მომხმარებლის დოკუმენტაცია",
"Administrator Documentation" => "ადმინისტრატორის დოკუმენტაცია",
"Online Documentation" => "ონლაინ დოკუმენტაცია",
"Forum" => "ფორუმი",
@@ -85,7 +77,6 @@ $TRANSLATIONS = array(
"Cancel" => "უარყოფა",
"Language" => "ენა",
"Help translate" => "თარგმნის დახმარება",
-"SSL root certificates" => "SSL root სერთიფიკატები",
"Import Root Certificate" => "Root სერთიფიკატის იმპორტირება",
"Login Name" => "მომხმარებლის სახელი",
"Create" => "შექმნა",
diff --git a/settings/l10n/km.php b/settings/l10n/km.php
index da1f5872741..3e7522dcf9e 100644
--- a/settings/l10n/km.php
+++ b/settings/l10n/km.php
@@ -1,13 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "បាន​រក្សាទុក",
-"test email settings" => "សាក​ល្បង​ការ​កំណត់​អ៊ីមែល",
-"If you received this email, the settings seem to be correct." => "ប្រសិន​បើ​អ្នក​ទទួល​បាន​អ៊ីមែល​នេះ មាន​ន័យ​ថា​ការ​កំណត់​គឺ​បាន​ត្រឹមម​ត្រូវ​ហើយ។",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "មាន​កំហុស​កើត​ឡើង​នៅ​ពេល​កំពុង​ផ្ញើ​អ៊ីមែល​ចេញ។ សូម​មើល​ការ​កំណត់​របស់​អ្នក​ម្ដង​ទៀត។",
-"Email sent" => "បាន​ផ្ញើ​អ៊ីមែល",
-"You need to set your user email before being able to send test emails." => "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
-"Encryption" => "កូដនីយកម្ម",
-"Unable to load list from App Store" => "មិនអាចផ្ទុកបញ្ជីកម្មវិធីពី App Store",
+"Enabled" => "បាន​បើក",
"Authentication error" => "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ",
"Group already exists" => "មាន​ក្រុម​នេះ​រួច​ហើយ",
"Unable to add group" => "មិន​អាច​បន្ថែម​ក្រុម",
@@ -22,18 +15,18 @@ $TRANSLATIONS = array(
"Unable to remove user from group %s" => "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s",
"Couldn't update app." => "មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី។",
"Wrong password" => "ខុស​ពាក្យ​សម្ងាត់",
+"Saved" => "បាន​រក្សាទុក",
+"test email settings" => "សាក​ល្បង​ការ​កំណត់​អ៊ីមែល",
+"If you received this email, the settings seem to be correct." => "ប្រសិន​បើ​អ្នក​ទទួល​បាន​អ៊ីមែល​នេះ មាន​ន័យ​ថា​ការ​កំណត់​គឺ​បាន​ត្រឹមម​ត្រូវ​ហើយ។",
+"Email sent" => "បាន​ផ្ញើ​អ៊ីមែល",
+"You need to set your user email before being able to send test emails." => "អ្នក​ត្រូវ​តែ​កំណត់​អ៊ីមែល​របស់​អ្នក​មុន​នឹង​អាច​ផ្ញើ​អ៊ីមែល​សាកល្បង​បាន។",
"Sending..." => "កំពុង​ផ្ញើ...",
-"User Documentation" => "ឯកសារ​សម្រាប់​អ្នក​ប្រើប្រាស់",
-"Admin Documentation" => "កម្រង​ឯកសារ​អភិបាល",
-"Update to {appversion}" => "ធ្វើ​បច្ចុប្បន្នភាព​ទៅ {appversion}",
-"Disable" => "បិទ",
-"Enable" => "បើក",
"Please wait...." => "សូម​រង់​ចាំ....",
"Error while disabling app" => "មាន​កំហុស​ពេល​កំពុង​បិទកម្មវិធី",
+"Disable" => "បិទ",
+"Enable" => "បើក",
"Updating...." => "កំពុង​ធ្វើ​បច្ចុប្បន្នភាព....",
"Error while updating app" => "មាន​កំហុស​ពេល​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី",
-"Error" => "កំហុស",
-"Update" => "ធ្វើ​បច្ចុប្បន្នភាព",
"Updated" => "បាន​ធ្វើ​បច្ចុប្បន្នភាព",
"Select a profile picture" => "ជ្រើស​រូបភាព​ប្រវត្តិរូប",
"Very weak password" => "ពាក្យ​សម្ងាត់​ខ្សោយ​ណាស់",
@@ -45,13 +38,13 @@ $TRANSLATIONS = array(
"Decrypting files... Please wait, this can take some time." => "កំពុង Decrypt​ ឯកសារ... សូម​រង​ចាំ វា​អាច​ត្រូវការ​ពេល​មួយ​ចំនួន។",
"Groups" => "ក្រុ",
"undo" => "មិន​ធ្វើ​វិញ",
-"Group Admin" => "ក្រុម​អ្នក​គ្រប់គ្រង",
"never" => "មិនដែរ",
"add group" => "បន្ថែម​ក្រុម",
"A valid username must be provided" => "ត្រូវ​ផ្ដល់​ឈ្មោះ​អ្នក​ប្រើ​ឲ្យ​បាន​ត្រឹម​ត្រូវ",
"Error creating user" => "មាន​កំហុស​ក្នុង​ការ​បង្កើត​អ្នក​ប្រើ",
"A valid password must be provided" => "ត្រូវ​ផ្ដល់​ពាក្យ​សម្ងាត់​ឲ្យ​បាន​ត្រឹម​ត្រូវ",
"__language_name__" => "__language_name__",
+"Encryption" => "កូដនីយកម្ម",
"None" => "គ្មាន",
"Login" => "ចូល",
"SSL" => "SSL",
@@ -79,11 +72,9 @@ $TRANSLATIONS = array(
"Less" => "តិច",
"Version" => "កំណែ",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "សរសេរ​កម្មវិធី​ដោយ <a href=\"http://ownCloud.org/contact\" target=\"_blank\">សហគមន៍ ownCloud</a> ហើយ <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> គឺ​ស្ថិត​ក្នុង​អាជ្ញាប័ណ្ណ <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>។",
-"Add your App" => "បន្ថែម​កម្មវិធី​របស់​អ្នក",
-"More Apps" => "កម្មវិធី​ច្រើន​ទៀត",
-"Select an App" => "ជ្រើស​កម្មវិធី​មួយ",
-"See application page at apps.owncloud.com" => "សូម​មើក​កម្មវិធី​ផ្សេងៗ​លើទំព័រ apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-អាជ្ញា​ប័ណ្ណ​ដោយ <span class=\"author\"></span>",
+"by" => "ដោយ",
+"User Documentation" => "ឯកសារ​សម្រាប់​អ្នក​ប្រើប្រាស់",
+"Admin Documentation" => "កម្រង​ឯកសារ​អភិបាល",
"Administrator Documentation" => "ឯកសារ​សម្រាប់​​អ្នក​​គ្រប់​គ្រង​ប្រព័ន្ធ",
"Online Documentation" => "ឯកសារ Online",
"Forum" => "វេទិកាពិភាក្សា",
diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php
index cc1448f1d2f..247460cf82c 100644
--- a/settings/l10n/ko.php
+++ b/settings/l10n/ko.php
@@ -1,10 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "저장됨",
-"Email sent" => "이메일 발송됨",
-"Encryption" => "암호화",
-"Authentication method" => "인증 방법",
-"Unable to load list from App Store" => "앱 스토어에서 목록을 가져올 수 없습니다",
+"Enabled" => "활성화",
"Authentication error" => "인증 오류",
"Your full name has been changed." => "전체 이름이 변경되었습니다.",
"Unable to change full name" => "전체 이름을 변경할 수 없음",
@@ -28,21 +24,17 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "관리자 복구 암호가 잘못되었습니다. 암호를 다시 확인하십시오.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "백엔드에서 암호 변경을 지원하지 않지만, 사용자의 암호화 키는 갱신되었습니다.",
"Unable to change password" => "암호를 변경할 수 없음",
+"Saved" => "저장됨",
+"Email sent" => "이메일 발송됨",
"Sending..." => "보내는 중...",
"All" => "모두",
-"User Documentation" => "사용자 문서",
-"Admin Documentation" => "운영자 문서",
-"Update to {appversion}" => "버전 {appversion}(으)로 업데이트",
-"Uninstall App" => "앱 제거",
-"Disable" => "사용 안함",
-"Enable" => "사용함",
"Please wait...." => "기다려 주십시오....",
"Error while disabling app" => "앱을 비활성화하는 중 오류 발생",
+"Disable" => "사용 안함",
+"Enable" => "사용함",
"Error while enabling app" => "앱을 활성화하는 중 오류 발생",
"Updating...." => "업데이트 중....",
"Error while updating app" => "앱을 업데이트하는 중 오류 발생",
-"Error" => "오류",
-"Update" => "업데이트",
"Updated" => "업데이트됨",
"Uninstalling ...." => "제거 하는 중 ....",
"Error while uninstalling app" => "앱을 제거하는 중 오류 발생",
@@ -59,7 +51,6 @@ $TRANSLATIONS = array(
"Error creating group" => "그룹을 생성하던 중 오류가 발생하였습니다",
"deleted {groupName}" => "{groupName} 삭제됨",
"undo" => "실행 취소",
-"Group Admin" => "그룹 관리자",
"never" => "없음",
"deleted {userName}" => "{userName} 삭제됨",
"add group" => "그룹 추가",
@@ -68,6 +59,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "올바른 암호를 입력해야 함",
"Warning: Home directory for user \"{user}\" already exists" => "경고: 사용자 \"{user}\"의 홈 디렉터리가 이미 존재합니다",
"__language_name__" => "한국어",
+"SSL root certificates" => "SSL 루트 인증서",
+"Encryption" => "암호화",
"Everything (fatal issues, errors, warnings, info, debug)" => "모두 (치명적 문제, 오류, 경고, 정보, 디버그)",
"Info, warnings, errors and fatal issues" => "정보, 경고, 오류, 치명적 문제",
"Warnings, errors and fatal issues" => "경고, 오류, 치명적 문제",
@@ -105,6 +98,7 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "SSL 강제 설정을 변경하려면 %s에 HTTPS로 연결해야 합니다.",
"Email Server" => "전자우편 서버",
"From address" => "보낸 이 주소",
+"Authentication method" => "인증 방법",
"Authentication required" => "인증 필요함",
"Server address" => "서버 주소",
"Port" => "포트",
@@ -119,14 +113,12 @@ $TRANSLATIONS = array(
"Less" => "덜 중요함",
"Version" => "버전",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud 커뮤니티</a>에 의해서 개발되었습니다. <a href=\"https://github.com/owncloud\" target=\"_blank\">원본 코드</a>는 <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>에 따라 사용이 허가됩니다.",
-"Add your App" => "내 앱 추가",
-"More Apps" => "더 많은 앱",
-"Select an App" => "앱 선택",
+"by" => "작성:",
"Documentation:" => "문서",
-"See application page at apps.owncloud.com" => "apps.owncloud.com에 있는 앱 페이지를 참고하십시오",
-"See application website" => "어플리케이션 웹사이트 보기",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-라이선스됨: <span class=\"author\"></span>",
+"User Documentation" => "사용자 문서",
+"Admin Documentation" => "운영자 문서",
"Enable only for specific groups" => "특정 그룹에만 허용",
+"Uninstall App" => "앱 제거",
"Administrator Documentation" => "관리자 문서",
"Online Documentation" => "온라인 문서",
"Forum" => "포럼",
@@ -154,7 +146,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "프로필 이미지로 사용",
"Language" => "언어",
"Help translate" => "번역 돕기",
-"SSL root certificates" => "SSL 루트 인증서",
"Import Root Certificate" => "루트 인증서 가져오기",
"The encryption app is no longer enabled, please decrypt all your files" => "암호화 앱이 비활성화되었습니다. 모든 파일을 복호화해야 합니다.",
"Log-in password" => "로그인 암호",
diff --git a/settings/l10n/ku_IQ.php b/settings/l10n/ku_IQ.php
index b5c40ae0a1f..2a0ca54def8 100644
--- a/settings/l10n/ku_IQ.php
+++ b/settings/l10n/ku_IQ.php
@@ -1,13 +1,12 @@
<?php
$TRANSLATIONS = array(
-"Encryption" => "نهێنیکردن",
"Invalid request" => "داواکارى نادروستە",
"Enable" => "چالاککردن",
-"Error" => "هه‌ڵه",
-"Update" => "نوێکردنه‌وه",
+"Encryption" => "نهێنیکردن",
"None" => "هیچ",
"Login" => "چوونەژوورەوە",
"Server address" => "ناونیشانی ڕاژه",
+"by" => "له‌لایه‌ن",
"Password" => "وشەی تێپەربو",
"New password" => "وشەی نهێنی نوێ",
"Email" => "ئیمه‌یل",
diff --git a/settings/l10n/lb.php b/settings/l10n/lb.php
index 214ed9d2bc5..25cd41b29f5 100644
--- a/settings/l10n/lb.php
+++ b/settings/l10n/lb.php
@@ -1,7 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Email geschéckt",
-"Unable to load list from App Store" => "Konnt Lescht net vum App Store lueden",
"Authentication error" => "Authentifikatioun's Fehler",
"Group already exists" => "Group existeiert schon.",
"Unable to add group" => "Onmeiglech Grupp beizefügen.",
@@ -13,15 +11,13 @@ $TRANSLATIONS = array(
"Invalid request" => "Ongülteg Requête",
"Admins can't remove themself from the admin group" => "Admins kennen sech selwer net aus enger Admin Group läschen.",
"Unable to add user to group %s" => "Onmeiglech User an Grupp ze sätzen %s",
+"Email sent" => "Email geschéckt",
"All" => "All",
"Disable" => "Ofschalten",
"Enable" => "Aschalten",
-"Error" => "Fehler",
-"Update" => "Update",
"Delete" => "Läschen",
"Groups" => "Gruppen",
"undo" => "réckgängeg man",
-"Group Admin" => "Gruppen Admin",
"never" => "ni",
"__language_name__" => "__language_name__",
"Login" => "Login",
@@ -33,9 +29,7 @@ $TRANSLATIONS = array(
"Log" => "Log",
"More" => "Méi",
"Less" => "Manner",
-"Add your App" => "Setz deng App bei",
-"Select an App" => "Wiel eng Applikatioun aus",
-"See application page at apps.owncloud.com" => "Kuck dir d'Applicatioun's Säit op apps.owncloud.com un",
+"by" => "vun",
"Password" => "Passwuert",
"Unable to change your password" => "Konnt däin Passwuert net änneren",
"Current password" => "Momentan 't Passwuert",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
index bc8a9127a17..9a08ccb55a4 100644
--- a/settings/l10n/lt_LT.php
+++ b/settings/l10n/lt_LT.php
@@ -1,8 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Laiškas išsiųstas",
-"Encryption" => "Šifravimas",
-"Unable to load list from App Store" => "Neįmanoma įkelti sąrašo iš Programų Katalogo",
+"Enabled" => "Įjungta",
"Authentication error" => "Autentikacijos klaida",
"Group already exists" => "Grupė jau egzistuoja",
"Unable to add group" => "Nepavyko pridėti grupės",
@@ -22,25 +20,21 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Netinkamas administratoriau atkūrimo slaptažodis. Prašome pasitikrinti ir bandyti vėl.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Sistema nepalaiko slaptažodžio keitimo, bet naudotojo šifravimo raktas buvo sėkmingai atnaujintas.",
"Unable to change password" => "Nepavyksta pakeisti slaptažodžio",
+"Email sent" => "Laiškas išsiųstas",
"All" => "Viskas",
-"User Documentation" => "Naudotojo dokumentacija",
-"Update to {appversion}" => "Atnaujinti iki {appversion}",
-"Disable" => "Išjungti",
-"Enable" => "Įjungti",
"Please wait...." => "Prašome palaukti...",
"Error while disabling app" => "Klaida išjungiant programą",
+"Disable" => "Išjungti",
+"Enable" => "Įjungti",
"Error while enabling app" => "Klaida įjungiant programą",
"Updating...." => "Atnaujinama...",
"Error while updating app" => "Įvyko klaida atnaujinant programą",
-"Error" => "Klaida",
-"Update" => "Atnaujinti",
"Updated" => "Atnaujinta",
"Select a profile picture" => "Pažymėkite profilio paveikslėlį",
"Delete" => "Ištrinti",
"Decrypting files... Please wait, this can take some time." => "Iššifruojami failai... Prašome palaukti, tai gali užtrukti.",
"Groups" => "Grupės",
"undo" => "anuliuoti",
-"Group Admin" => "Grupės administratorius",
"never" => "niekada",
"add group" => "pridėti grupę",
"A valid username must be provided" => "Vartotojo vardas turi būti tinkamas",
@@ -48,6 +42,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Slaptažodis turi būti tinkamas",
"Warning: Home directory for user \"{user}\" already exists" => "Įspėjimas: Vartotojo \"{user}\" namų aplankas jau egzistuoja",
"__language_name__" => "Lietuvių",
+"SSL root certificates" => "SSL sertifikatas",
+"Encryption" => "Šifravimas",
"Fatal issues only" => "Tik kritinės problemos",
"None" => "Nieko",
"Login" => "Prisijungti",
@@ -77,11 +73,9 @@ $TRANSLATIONS = array(
"Less" => "Mažiau",
"Version" => "Versija",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Sukurta <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud bendruomenės</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">pirminis kodas</a> platinamas pagal <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Pridėti programėlę",
-"More Apps" => "Daugiau aplikacijų",
-"Select an App" => "Pasirinkite programą",
-"See application page at apps.owncloud.com" => "Žiūrėti programos puslapį svetainėje apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>- autorius<span class=\"author\"></span>",
+"More apps" => "Daugiau programų",
+"by" => " ",
+"User Documentation" => "Naudotojo dokumentacija",
"Administrator Documentation" => "Administratoriaus dokumentacija",
"Online Documentation" => "Dokumentacija tinkle",
"Forum" => "Forumas",
@@ -108,7 +102,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Pasirinkite profilio paveiksliuką",
"Language" => "Kalba",
"Help translate" => "Padėkite išversti",
-"SSL root certificates" => "SSL sertifikatas",
"Import Root Certificate" => "Įkelti pagrindinį sertifikatą",
"Log-in password" => "Prisijungimo slaptažodis",
"Decrypt all Files" => "Iššifruoti visus failus",
diff --git a/settings/l10n/lv.php b/settings/l10n/lv.php
index 256e35076f1..f1c38f60e19 100644
--- a/settings/l10n/lv.php
+++ b/settings/l10n/lv.php
@@ -1,8 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Vēstule nosūtīta",
-"Encryption" => "Šifrēšana",
-"Unable to load list from App Store" => "Nevar lejupielādēt sarakstu no lietotņu veikala",
"Authentication error" => "Autentifikācijas kļūda",
"Group already exists" => "Grupa jau eksistē",
"Unable to add group" => "Nevar pievienot grupu",
@@ -16,28 +13,26 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "Nevar pievienot lietotāju grupai %s",
"Unable to remove user from group %s" => "Nevar izņemt lietotāju no grupas %s",
"Couldn't update app." => "Nevarēja atjaunināt lietotni.",
+"Email sent" => "Vēstule nosūtīta",
"All" => "Visi",
-"User Documentation" => "Lietotāja dokumentācija",
-"Update to {appversion}" => "Atjaunināt uz {appversion}",
+"Please wait...." => "Lūdzu, uzgaidiet....",
"Disable" => "Deaktivēt",
"Enable" => "Aktivēt",
-"Please wait...." => "Lūdzu, uzgaidiet....",
"Updating...." => "Atjaunina....",
"Error while updating app" => "Kļūda, atjauninot lietotni",
-"Error" => "Kļūda",
-"Update" => "Atjaunināt",
"Updated" => "Atjaunināta",
"Delete" => "Dzēst",
"Decrypting files... Please wait, this can take some time." => "Atšifrēju failus... Uzgaidiet tas var ilgt kādu laiku.",
"Groups" => "Grupas",
"undo" => "atsaukt",
-"Group Admin" => "Grupas administrators",
"never" => "nekad",
"add group" => "pievienot grupu",
"A valid username must be provided" => "Jānorāda derīgs lietotājvārds",
"Error creating user" => "Kļūda, veidojot lietotāju",
"A valid password must be provided" => "Jānorāda derīga parole",
"__language_name__" => "__valodas_nosaukums__",
+"SSL root certificates" => "SSL saknes sertifikāti",
+"Encryption" => "Šifrēšana",
"None" => "Nav",
"Login" => "Ierakstīties",
"Security Warning" => "Brīdinājums par drošību",
@@ -66,11 +61,9 @@ $TRANSLATIONS = array(
"Less" => "Mazāk",
"Version" => "Versija",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Izstrādājusi<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud kopiena</a>,<a href=\"https://github.com/owncloud\" target=\"_blank\">pirmkodu</a>kurš ir licencēts zem <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Pievieno savu lietotni",
-"More Apps" => "Vairāk lietotņu",
-"Select an App" => "Izvēlies lietotni",
-"See application page at apps.owncloud.com" => "Apskati lietotņu lapu — apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencēts no <span class=\"author\"></span>",
+"More apps" => "Vairāk programmu",
+"by" => "līdz",
+"User Documentation" => "Lietotāja dokumentācija",
"Administrator Documentation" => "Administratora dokumentācija",
"Online Documentation" => "Tiešsaistes dokumentācija",
"Forum" => "Forums",
@@ -90,7 +83,6 @@ $TRANSLATIONS = array(
"Cancel" => "Atcelt",
"Language" => "Valoda",
"Help translate" => "Palīdzi tulkot",
-"SSL root certificates" => "SSL saknes sertifikāti",
"Import Root Certificate" => "Importēt saknes sertifikātus",
"Log-in password" => "Pieslēgšanās parole",
"Decrypt all Files" => "Atšifrēt visus failus",
diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php
index 229bd0a16e4..f24fbd6e06d 100644
--- a/settings/l10n/mk.php
+++ b/settings/l10n/mk.php
@@ -1,13 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Неправилна вредност е доставена за %s",
-"Saved" => "Снимено",
-"test email settings" => "провери ги нагодувањата за електронска пошта",
-"Email sent" => "Е-порака пратена",
-"Send mode" => "Мод на испраќање",
-"Encryption" => "Енкрипција",
-"Authentication method" => "Метод на автентификација",
-"Unable to load list from App Store" => "Неможам да вчитам листа од App Store",
+"Enabled" => "Овозможен",
"Authentication error" => "Грешка во автентикација",
"Your full name has been changed." => "Вашето целосно име е променето.",
"Unable to change full name" => "Не можам да го променам целото име",
@@ -29,20 +22,18 @@ $TRANSLATIONS = array(
"Wrong password" => "Погрешна лозинка",
"No user supplied" => "Нема корисничко име",
"Unable to change password" => "Вашата лозинка неможе да се смени",
+"Saved" => "Снимено",
+"test email settings" => "провери ги нагодувањата за електронска пошта",
+"Email sent" => "Е-порака пратена",
"Sending..." => "Испраќам...",
"All" => "Сите",
-"User Documentation" => "Корисничка документација",
-"Admin Documentation" => "Админстраторска документација",
-"Update to {appversion}" => "Надгради на {appversion}",
-"Disable" => "Оневозможи",
-"Enable" => "Овозможи",
"Please wait...." => "Ве молам почекајте ...",
"Error while disabling app" => "Грешка при исклучувањето на апликацијата",
+"Disable" => "Оневозможи",
+"Enable" => "Овозможи",
"Error while enabling app" => "Грешка при вклучувањето на апликацијата",
"Updating...." => "Надградувам ...",
"Error while updating app" => "Грешка додека ја надградувам апликацијата",
-"Error" => "Грешка",
-"Update" => "Ажурирај",
"Updated" => "Надграден",
"Select a profile picture" => "Одбери фотографија за профилот",
"Very weak password" => "Многу слаба лозинка",
@@ -57,13 +48,14 @@ $TRANSLATIONS = array(
"Error creating group" => "Грешка при креирање на група",
"A valid group name must be provided" => "Мора да се обезбеди валидно име на група",
"undo" => "врати",
-"Group Admin" => "Администратор на група",
"never" => "никогаш",
"add group" => "додади група",
"A valid username must be provided" => "Мора да се обезбеди валидно корисничко име ",
"Error creating user" => "Грешка при креирање на корисникот",
"A valid password must be provided" => "Мора да се обезбеди валидна лозинка",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL root сертификати",
+"Encryption" => "Енкрипција",
"Info, warnings, errors and fatal issues" => "Информации, предупредувања, грешки и фатални работи",
"Warnings, errors and fatal issues" => "Предупредувања, грешки и фатални работи",
"Errors and fatal issues" => "Грешки и фатални работи",
@@ -97,8 +89,10 @@ $TRANSLATIONS = array(
"Enforce HTTPS" => "Наметни HTTPS",
"Email Server" => "Сервер за електронска пошта",
"This is used for sending out notifications." => "Ова се користи за испраќање на известувања.",
+"Send mode" => "Мод на испраќање",
"From address" => "Од адреса",
"mail" => "Електронска пошта",
+"Authentication method" => "Метод на автентификација",
"Authentication required" => "Потребна е автентификација",
"Server address" => "Адреса на сервер",
"Port" => "Порта",
@@ -113,13 +107,10 @@ $TRANSLATIONS = array(
"Less" => "Помалку",
"Version" => "Верзија",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Развој од <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud заедницата</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">изворниот код</a> е лиценциран со<a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Додадете ја Вашата апликација",
-"More Apps" => "Повеќе аппликации",
-"Select an App" => "Избери аппликација",
+"by" => "од",
"Documentation:" => "Документација:",
-"See application page at apps.owncloud.com" => "Види ја страницата со апликации на apps.owncloud.com",
-"See application website" => "Види го веб сајтот на апликацијата",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-лиценцирано од <span class=\"author\"></span>",
+"User Documentation" => "Корисничка документација",
+"Admin Documentation" => "Админстраторска документација",
"Enable only for specific groups" => "Овозможи само на специфицирани групи",
"Administrator Documentation" => "Администраторска документација",
"Online Documentation" => "Документација на интернет",
@@ -148,7 +139,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Одбери фотографија за профилот",
"Language" => "Јазик",
"Help translate" => "Помогни во преводот",
-"SSL root certificates" => "SSL root сертификати",
"Import Root Certificate" => "Увези",
"Log-in password" => "Лозинка за најавување",
"Decrypt all Files" => "Дешифрирај ги сите датотеки",
diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php
index 690b92bc732..c20dcae9ea0 100644
--- a/settings/l10n/ms_MY.php
+++ b/settings/l10n/ms_MY.php
@@ -7,8 +7,6 @@ $TRANSLATIONS = array(
"Invalid request" => "Permintaan tidak sah",
"Disable" => "Nyahaktif",
"Enable" => "Aktif",
-"Error" => "Ralat",
-"Update" => "Kemaskini",
"Delete" => "Padam",
"Groups" => "Kumpulan",
"never" => "jangan",
@@ -19,9 +17,7 @@ $TRANSLATIONS = array(
"Log" => "Log",
"Log level" => "Tahap Log",
"More" => "Lanjutan",
-"Add your App" => "Tambah apps anda",
-"Select an App" => "Pilih aplikasi",
-"See application page at apps.owncloud.com" => "Lihat halaman applikasi di apps.owncloud.com",
+"by" => "oleh",
"Password" => "Kata laluan",
"Unable to change your password" => "Gagal mengubah kata laluan anda ",
"Current password" => "Kata laluan semasa",
diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php
index 68f827ac2c0..08e1a3dbc60 100644
--- a/settings/l10n/nb_NO.php
+++ b/settings/l10n/nb_NO.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Ugyldig verdi angitt for %s",
-"Saved" => "Lagret",
-"test email settings" => "Test av innstillinger for e-post",
-"If you received this email, the settings seem to be correct." => "Hvis du mottar denne e-posten er innstillingene tydeligvis korrekte.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Et problem oppstod under sending av e-posten. Sjekk innstillingene.",
-"Email sent" => "E-post sendt",
-"You need to set your user email before being able to send test emails." => "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.",
-"Send mode" => "Sendemåte",
-"Encryption" => "Kryptering",
-"Authentication method" => "Autentiseringsmetode",
-"Unable to load list from App Store" => "Lasting av liste fra App Store feilet.",
+"Enabled" => "Aktiv",
"Authentication error" => "Autentiseringsfeil",
"Your full name has been changed." => "Ditt fulle navn er blitt endret.",
"Unable to change full name" => "Klarte ikke å endre fullt navn",
@@ -40,23 +30,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.",
"Unable to change password" => "Kunne ikke endre passord",
+"Saved" => "Lagret",
+"test email settings" => "Test av innstillinger for e-post",
+"If you received this email, the settings seem to be correct." => "Hvis du mottar denne e-posten er innstillingene tydeligvis korrekte.",
+"Email sent" => "E-post sendt",
+"You need to set your user email before being able to send test emails." => "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?",
"Add trusted domain" => "Legg til et tiltrodd domene",
"Sending..." => "Sender...",
"All" => "Alle",
-"User Documentation" => "Brukerdokumentasjon",
-"Admin Documentation" => "Admin-dokumentasjon",
-"Update to {appversion}" => "Oppdater til {appversion}",
-"Uninstall App" => "Avinstaller app",
-"Disable" => "Deaktiver ",
-"Enable" => "Aktiver",
"Please wait...." => "Vennligst vent...",
"Error while disabling app" => "Deaktivering av app feilet",
+"Disable" => "Deaktiver ",
+"Enable" => "Aktiver",
"Error while enabling app" => "Aktivering av app feilet",
"Updating...." => "Oppdaterer...",
"Error while updating app" => "Feil ved oppdatering av app",
-"Error" => "Feil",
-"Update" => "Oppdater",
"Updated" => "Oppdatert",
"Uninstalling ...." => "Avinstallerer ....",
"Error while uninstalling app" => "Feil ved avinstallering av app",
@@ -78,7 +67,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Et gyldig gruppenavn må oppgis",
"deleted {groupName}" => "slettet {groupName}",
"undo" => "angre",
-"Group Admin" => "Gruppeadministrator",
"never" => "aldri",
"deleted {userName}" => "slettet {userName}",
"add group" => "legg til gruppe",
@@ -87,6 +75,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Oppgi et gyldig passord",
"Warning: Home directory for user \"{user}\" already exists" => "Advarsel: Hjemmemappe for bruker \"{user}\" eksisterer allerede",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL rotsertifikater",
+"Encryption" => "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" => "Alt (fatale problemer, feil, advarsler, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, advarsler, feil og fatale problemer",
"Warnings, errors and fatal issues" => "Advarsler, feil og fatale problemer",
@@ -148,8 +138,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Vennligst koble til din %s via HTTPS for å aktivere eller deaktivere tvungen SSL.",
"Email Server" => "E-postserver",
"This is used for sending out notifications." => "Dette brukes for utsending av varsler.",
+"Send mode" => "Sendemåte",
"From address" => "Fra adresse",
"mail" => "e-post",
+"Authentication method" => "Autentiseringsmetode",
"Authentication required" => "Autentisering kreves",
"Server address" => "Server-adresse",
"Port" => "Port",
@@ -164,14 +156,12 @@ $TRANSLATIONS = array(
"Less" => "Mindre",
"Version" => "Versjon",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Utviklet av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-fellesskapet</a>. <a href=\"https://github.com/owncloud\" target=\"_blank\">Kildekoden</a> er lisensiert under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Legg til din App",
-"More Apps" => "Flere apper",
-"Select an App" => "Velg en app",
+"by" => "av",
"Documentation:" => "Dokumentasjon:",
-"See application page at apps.owncloud.com" => "Se applikasjonens side på apps.owncloud.org",
-"See application website" => "Vis applikasjonens nettsted",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-lisensiert av <span class=\"author\"></span>",
+"User Documentation" => "Brukerdokumentasjon",
+"Admin Documentation" => "Admin-dokumentasjon",
"Enable only for specific groups" => "Aktiver kun for visse grupper",
+"Uninstall App" => "Avinstaller app",
"Administrator Documentation" => "Dokumentasjon for administratorer",
"Online Documentation" => "Online dokumentasjon",
"Forum" => "Forum",
@@ -201,7 +191,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Velg som profilbilde",
"Language" => "Språk",
"Help translate" => "Bidra til oversettelsen",
-"SSL root certificates" => "SSL rotsertifikater",
"Common Name" => "Vanlig navn",
"Valid until" => "Gyldig til",
"Issued By" => "Utstedt av",
diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php
index 07c5f66bc9c..081dc50c80e 100644
--- a/settings/l10n/nl.php
+++ b/settings/l10n/nl.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Ongeldige waarde voor %s",
-"Saved" => "Bewaard",
-"test email settings" => "test e-mailinstellingen",
-"If you received this email, the settings seem to be correct." => "Als u dit e-mailbericht ontvangt, lijken de instellingen juist.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen.",
-"Email sent" => "E-mail verzonden",
-"You need to set your user email before being able to send test emails." => "U moet uw e-mailadres invoeren voordat u testberichten kunt versturen.",
-"Send mode" => "Verstuurmodus",
-"Encryption" => "Versleuteling",
-"Authentication method" => "Authenticatiemethode",
-"Unable to load list from App Store" => "Kan de lijst niet van de App store laden",
+"Enabled" => "Geactiveerd",
+"Not enabled" => "Niet ingeschakeld",
+"Recommended" => "Aanbevolen",
"Authentication error" => "Authenticatie fout",
"Your full name has been changed." => "Uw volledige naam is gewijzigd.",
"Unable to change full name" => "Kan de volledige naam niet wijzigen",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Onjuist beheerdersherstelwachtwoord. Controleer het wachtwoord en probeer het opnieuw.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "De Back-end ondersteunt geen wachtwoordwijzigingen, maar de cryptosleutel van de gebruiker is succesvol bijgewerkt.",
"Unable to change password" => "Kan wachtwoord niet wijzigen",
+"Saved" => "Bewaard",
+"test email settings" => "test e-mailinstellingen",
+"If you received this email, the settings seem to be correct." => "Als u dit e-mailbericht ontvangt, lijken de instellingen juist.",
+"A problem occurred while sending the email. Please revise your settings." => "Er ontstond een probleem bij het versturen van de e-mail. Controleer uw instellingen.",
+"Email sent" => "E-mail verzonden",
+"You need to set your user email before being able to send test emails." => "U moet uw e-mailadres invoeren voordat u testberichten kunt versturen.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Weet u zeker dat u \"{domain}\" als een vertrouwd domein wilt toevoegen?",
"Add trusted domain" => "Vertrouwd domein toevoegen",
"Sending..." => "Versturen...",
"All" => "Alle",
-"User Documentation" => "Gebruikersdocumentatie",
-"Admin Documentation" => "Beheerdocumentatie",
-"Update to {appversion}" => "Bijwerken naar {appversion}",
-"Uninstall App" => "De-installeren app",
-"Disable" => "Uitschakelen",
-"Enable" => "Activeer",
"Please wait...." => "Even geduld aub....",
"Error while disabling app" => "Fout tijdens het uitzetten van het programma",
+"Disable" => "Uitschakelen",
+"Enable" => "Activeer",
"Error while enabling app" => "Fout tijdens het aanzetten van het programma",
"Updating...." => "Bijwerken....",
"Error while updating app" => "Fout bij bijwerken app",
-"Error" => "Fout",
-"Update" => "Bijwerken",
"Updated" => "Bijgewerkt",
"Uninstalling ...." => "De-installeren ...",
"Error while uninstalling app" => "Fout bij de-installeren app",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Er moet een geldige groepsnaam worden opgegeven",
"deleted {groupName}" => "verwijderd {groupName}",
"undo" => "ongedaan maken",
-"Group Admin" => "Groep beheerder",
+"no group" => "geen groep",
"never" => "geen",
"deleted {userName}" => "verwijderd {userName}",
"add group" => "toevoegen groep",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Er moet een geldig wachtwoord worden opgegeven",
"Warning: Home directory for user \"{user}\" already exists" => "Waarschuwing: Home directory voor gebruiker \"{user}\" bestaat al",
"__language_name__" => "Nederlands",
+"Personal Info" => "Persoonlijke info",
+"SSL root certificates" => "SSL root certificaten",
+"Encryption" => "Versleuteling",
"Everything (fatal issues, errors, warnings, info, debug)" => "Alles (fatale problemen, fouten, waarschuwingen, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, waarschuwingen, fouten en fatale problemen",
"Warnings, errors and fatal issues" => "Waarschuwingen, fouten en fatale problemen",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Maak verbinding naar uw %s via HTTPS om een geforceerde versleutelde verbinding in- of uit te schakelen.",
"Email Server" => "E-mailserver",
"This is used for sending out notifications." => "Dit wordt gestuurd voor het verzenden van meldingen.",
+"Send mode" => "Verstuurmodus",
"From address" => "Afzenderadres",
"mail" => "e-mail",
+"Authentication method" => "Authenticatiemethode",
"Authentication required" => "Authenticatie vereist",
"Server address" => "Server adres",
"Port" => "Poort",
"Credentials" => "Inloggegevens",
"SMTP Username" => "SMTP gebruikersnaam",
"SMTP Password" => "SMTP wachtwoord",
+"Store credentials" => "Opslaan inloggegevens",
"Test email settings" => "Test e-mailinstellingen",
"Send email" => "Versturen e-mail",
"Log" => "Log",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Minder",
"Version" => "Versie",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Ontwikkeld door de <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud gemeenschap</a>, de <a href=\"https://github.com/owncloud\" target=\"_blank\">broncode</a> is gelicenseerd onder de <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "App toevoegen",
-"More Apps" => "Meer apps",
-"Select an App" => "Selecteer een app",
+"More apps" => "Meer applicaties",
+"Add your app" => "Voeg uw app toe",
+"by" => "door",
+"licensed" => "gelicenseerd",
"Documentation:" => "Documentatie:",
-"See application page at apps.owncloud.com" => "Zie de applicatiepagina op apps.owncloud.com",
-"See application website" => "Zie website van de applicatie",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-Gelicenseerd door <span class=\"author\"></span>",
+"User Documentation" => "Gebruikersdocumentatie",
+"Admin Documentation" => "Beheerdocumentatie",
+"Update to %s" => "Bijgewerkt naar %s",
"Enable only for specific groups" => "Alleen voor bepaalde groepen activeren",
+"Uninstall App" => "De-installeren app",
"Administrator Documentation" => "Beheerdersdocumentatie",
"Online Documentation" => "Online documentatie",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Kies als profielafbeelding",
"Language" => "Taal",
"Help translate" => "Help met vertalen",
-"SSL root certificates" => "SSL root certificaten",
"Common Name" => "Common Name",
"Valid until" => "Geldig tot",
"Issued By" => "Uitgegeven door",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Ongelimiteerd",
"Other" => "Anders",
"Username" => "Gebruikersnaam",
+"Group Admin for" => "Groepsbeheerder voor",
"Quota" => "Limieten",
"Storage Location" => "Opslaglocatie",
"Last Login" => "Laatste inlog",
diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php
index cc0f2438f3b..7fd2eb96d8e 100644
--- a/settings/l10n/nn_NO.php
+++ b/settings/l10n/nn_NO.php
@@ -1,8 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "E-post sendt",
-"Encryption" => "Kryptering",
-"Unable to load list from App Store" => "Klarer ikkje å lasta inn liste fra app-butikken",
"Authentication error" => "Autentiseringsfeil",
"Group already exists" => "Gruppa finst allereie",
"Unable to add group" => "Klarte ikkje leggja til gruppa",
@@ -22,18 +19,15 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Feil admingjenopprettingspassord. Ver venleg og sjekk passordet og prøv igjen.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Bakstykket støttar ikkje passordendring, men krypteringsnøkkelen til brukaren blei oppdatert.",
"Unable to change password" => "Klarte ikkje å endra passordet",
+"Email sent" => "E-post sendt",
"All" => "Alle",
-"User Documentation" => "Brukardokumentasjon",
-"Update to {appversion}" => "Oppdater til {appversion}",
-"Disable" => "Slå av",
-"Enable" => "Slå på",
"Please wait...." => "Ver venleg og vent …",
"Error while disabling app" => "Klarte ikkje å skru av programmet",
+"Disable" => "Slå av",
+"Enable" => "Slå på",
"Error while enabling app" => "Klarte ikkje å skru på programmet",
"Updating...." => "Oppdaterer …",
"Error while updating app" => "Feil ved oppdatering av app",
-"Error" => "Feil",
-"Update" => "Oppdater",
"Updated" => "Oppdatert",
"Select a profile picture" => "Vel eit profilbilete",
"Very weak password" => "Veldig svakt passord",
@@ -42,13 +36,13 @@ $TRANSLATIONS = array(
"Decrypting files... Please wait, this can take some time." => "Dekrypterer filer … Ver venleg og vent, dette kan ta ei stund.",
"Groups" => "Grupper",
"undo" => "angra",
-"Group Admin" => "Gruppestyrar",
"never" => "aldri",
"add group" => "legg til gruppe",
"A valid username must be provided" => "Du må oppgje eit gyldig brukarnamn",
"Error creating user" => "Feil ved oppretting av brukar",
"A valid password must be provided" => "Du må oppgje eit gyldig passord",
"__language_name__" => "Nynorsk",
+"Encryption" => "Kryptering",
"Login" => "Logg inn",
"Security Warning" => "Tryggleiksåtvaring",
"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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Datamappa og filene dine er sannsynlegvis leselege frå nettet. Fila .htaccess fungerer ikkje. Me rår deg sterkt til å konfigurera vevtenaren din sånn at datamappa di ikkje lenger er tilgjengeleg; alternativt kan du flytta datamappa ut av dokumentrot til vevtenaren.",
@@ -74,11 +68,8 @@ $TRANSLATIONS = array(
"Less" => "Mindre",
"Version" => "Utgåve",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"https://github.com/owncloud\" target=\"_blank\">Kjeldekoden</a>, utvikla av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud-fellesskapet</a>, er lisensiert under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Legg til din app",
-"More Apps" => "Fleire app-ar",
-"Select an App" => "Vel eit program",
-"See application page at apps.owncloud.com" => "Sjå programsida på apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "Lisensiert under <span class=\"licence\"></span> av <span class=\"author\"></span>",
+"by" => "av",
+"User Documentation" => "Brukardokumentasjon",
"Administrator Documentation" => "Administratordokumentasjon",
"Online Documentation" => "Dokumentasjon på nett",
"Forum" => "Forum",
diff --git a/settings/l10n/oc.php b/settings/l10n/oc.php
index 5ed02ec8f42..6c41061bbe7 100644
--- a/settings/l10n/oc.php
+++ b/settings/l10n/oc.php
@@ -1,6 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Unable to load list from App Store" => "Pas possible de cargar la tièra dempuèi App Store",
"Authentication error" => "Error d'autentificacion",
"Group already exists" => "Lo grop existís ja",
"Unable to add group" => "Pas capable d'apondre un grop",
@@ -14,11 +13,9 @@ $TRANSLATIONS = array(
"Unable to remove user from group %s" => "Pas capable de tira un usancièr del grop %s",
"Disable" => "Desactiva",
"Enable" => "Activa",
-"Error" => "Error",
"Delete" => "Escafa",
"Groups" => "Grops",
"undo" => "defar",
-"Group Admin" => "Grop Admin",
"never" => "jamai",
"__language_name__" => "__language_name__",
"Login" => "Login",
@@ -28,10 +25,7 @@ $TRANSLATIONS = array(
"Sharing" => "Al partejar",
"Log" => "Jornal",
"More" => "Mai d'aquò",
-"Add your App" => "Ajusta ton App",
-"Select an App" => "Selecciona una applicacion",
-"See application page at apps.owncloud.com" => "Agacha la pagina d'applications en cò de apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licençiat per <span class=\"author\"></span>",
+"by" => "per",
"Password" => "Senhal",
"Your password was changed" => "Ton senhal a cambiat",
"Unable to change your password" => "Pas possible de cambiar ton senhal",
diff --git a/settings/l10n/pa.php b/settings/l10n/pa.php
index 94b807624a9..2bfd1e44999 100644
--- a/settings/l10n/pa.php
+++ b/settings/l10n/pa.php
@@ -1,16 +1,14 @@
<?php
$TRANSLATIONS = array(
"Language changed" => "ਭਾਸ਼ਾ ਬਦਲੀ",
+"Please wait...." => "...ਉਡੀਕੋ ਜੀ",
"Disable" => "ਬੰਦ",
"Enable" => "ਚਾਲੂ",
-"Please wait...." => "...ਉਡੀਕੋ ਜੀ",
"Updating...." => "...ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
-"Error" => "ਗਲਤੀ",
"Updated" => "ਅੱਪਡੇਟ ਕੀਤਾ",
"Delete" => "ਹਟਾਓ",
"Groups" => "ਗਰੁੱਪ",
"undo" => "ਵਾਪਸ",
-"Group Admin" => "ਗਰੁੱਪ ਐਡਮਿਨ",
"add group" => "ਗਰੁੱਪ ਸ਼ਾਮਲ",
"__language_name__" => "__ਭਾਸ਼ਾ_ਨਾਂ__",
"Login" => "ਲਾਗਇਨ",
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index d5720a62139..481fec558b6 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Nieprawidłowa wartość %s",
-"Saved" => "Zapisano",
-"test email settings" => "przetestuj ustawienia email",
-"If you received this email, the settings seem to be correct." => "Jeśli otrzymałeś ten email, ustawienia wydają się być poprawne.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Pojawił się problem podczas wysyłania e-mail. Proszę sprawdzić ponownie ustawienia",
-"Email sent" => "E-mail wysłany",
-"You need to set your user email before being able to send test emails." => "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
-"Send mode" => "Tryb wysyłki",
-"Encryption" => "Szyfrowanie",
-"Authentication method" => "Metoda autentykacji",
-"Unable to load list from App Store" => "Nie można wczytać listy aplikacji",
+"Enabled" => "Włączone",
+"Not enabled" => "Nie włączone",
+"Recommended" => "Polecane",
"Authentication error" => "Błąd uwierzytelniania",
"Your full name has been changed." => "Twoja pełna nazwa została zmieniona.",
"Unable to change full name" => "Nie można zmienić pełnej nazwy",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Błędne hasło odzyskiwania. Sprawdź hasło i spróbuj ponownie.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Zaplecze nie obsługuje zmiany hasła, ale klucz szyfrowania użytkownika został pomyślnie zaktualizowany.",
"Unable to change password" => "Nie można zmienić hasła",
+"Saved" => "Zapisano",
+"test email settings" => "przetestuj ustawienia email",
+"If you received this email, the settings seem to be correct." => "Jeśli otrzymałeś ten email, ustawienia wydają się być poprawne.",
+"A problem occurred while sending the email. Please revise your settings." => "Pojawił się problem podczas wysyłania email. Proszę sprawdzić ponownie ustawienia",
+"Email sent" => "E-mail wysłany",
+"You need to set your user email before being able to send test emails." => "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?",
"Add trusted domain" => "Dodaj zaufaną domenę",
"Sending..." => "Wysyłam...",
"All" => "Wszystkie",
-"User Documentation" => "Dokumentacja użytkownika",
-"Admin Documentation" => "Dokumentacja Administratora",
-"Update to {appversion}" => "Aktualizacja do {appversion}",
-"Uninstall App" => "Odinstaluj aplikację",
-"Disable" => "Wyłącz",
-"Enable" => "Włącz",
"Please wait...." => "Proszę czekać...",
"Error while disabling app" => "Błąd podczas wyłączania aplikacji",
+"Disable" => "Wyłącz",
+"Enable" => "Włącz",
"Error while enabling app" => "Błąd podczas włączania aplikacji",
"Updating...." => "Aktualizacja w toku...",
"Error while updating app" => "Błąd podczas aktualizacji aplikacji",
-"Error" => "Błąd",
-"Update" => "Aktualizuj",
"Updated" => "Zaktualizowano",
"Uninstalling ...." => "Odinstalowywanie....",
"Error while uninstalling app" => "Błąd przy odinstalowywaniu aplikacji",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Należy podać prawidłową nazwę grupy",
"deleted {groupName}" => "usunięto {groupName}",
"undo" => "cofnij",
-"Group Admin" => "Administrator grupy",
+"no group" => "brak grupy",
"never" => "nigdy",
"deleted {userName}" => "usunięto {userName}",
"add group" => "dodaj grupę",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Należy podać prawidłowe hasło",
"Warning: Home directory for user \"{user}\" already exists" => "Ostrzeżenie: Katalog domowy dla użytkownika \"{user}\" już istnieje",
"__language_name__" => "polski",
+"Personal Info" => "Informacje osobiste",
+"SSL root certificates" => "Główny certyfikat SSL",
+"Encryption" => "Szyfrowanie",
"Everything (fatal issues, errors, warnings, info, debug)" => "Wszystko (Informacje, ostrzeżenia, błędy i poważne problemy, debug)",
"Info, warnings, errors and fatal issues" => "Informacje, ostrzeżenia, błędy i poważne problemy",
"Warnings, errors and fatal issues" => "Ostrzeżenia, błędy i poważne problemy",
@@ -148,8 +143,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Proszę połącz się do twojego %s za pośrednictwem protokołu HTTPS, aby włączyć lub wyłączyć stosowanie protokołu SSL.",
"Email Server" => "Serwer pocztowy",
"This is used for sending out notifications." => "To jest używane do wysyłania powiadomień",
+"Send mode" => "Tryb wysyłki",
"From address" => "Z adresu",
"mail" => "mail",
+"Authentication method" => "Metoda autentykacji",
"Authentication required" => "Wymagana autoryzacja",
"Server address" => "Adres Serwera",
"Port" => "Port",
@@ -164,14 +161,16 @@ $TRANSLATIONS = array(
"Less" => "Mniej",
"Version" => "Wersja",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Stworzone przez <a href=\"http://ownCloud.org/contact\" target=\"_blank\">społeczność ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">kod źródłowy</a> na licencji <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Dodaj swoją aplikację",
-"More Apps" => "Więcej aplikacji",
-"Select an App" => "Zaznacz aplikację",
+"More apps" => "Więcej aplikacji",
+"Add your app" => "Dodaj twoją aplikację",
+"by" => "przez",
+"licensed" => "Licencja",
"Documentation:" => "Dokumentacja:",
-"See application page at apps.owncloud.com" => "Zobacz stronę aplikacji na apps.owncloud.com",
-"See application website" => "Zobacz na stronie aplikacji",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencjonowane przez <span class=\"author\"></span>",
+"User Documentation" => "Dokumentacja użytkownika",
+"Admin Documentation" => "Dokumentacja Administratora",
+"Update to %s" => "Aktualizuj do %s",
"Enable only for specific groups" => "Włącz tylko dla określonych grup",
+"Uninstall App" => "Odinstaluj aplikację",
"Administrator Documentation" => "Dokumentacja administratora",
"Online Documentation" => "Dokumentacja online",
"Forum" => "Forum",
@@ -201,7 +200,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Wybierz zdjęcie profilu",
"Language" => "Język",
"Help translate" => "Pomóż w tłumaczeniu",
-"SSL root certificates" => "Główny certyfikat SSL",
"Common Name" => "Nazwa CN",
"Valid until" => "Ważny do",
"Issued By" => "Wydany przez",
@@ -229,6 +227,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Bez limitu",
"Other" => "Inne",
"Username" => "Nazwa użytkownika",
+"Group Admin for" => "Grupa Admin dla",
"Quota" => "Udział",
"Storage Location" => "Lokalizacja magazynu",
"Last Login" => "Ostatnio zalogowany",
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index 3ab79191e27..4b7cfb6ed76 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Valor inválido fornecido para %s",
-"Saved" => "Salvo",
-"test email settings" => "testar configurações de email",
-"If you received this email, the settings seem to be correct." => "Se você recebeu este e-mail, as configurações parecem estar corretas.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Ocorreu um problema ao enviar o e-mail. Por favor, reveja suas configurações.",
-"Email sent" => "E-mail enviado",
-"You need to set your user email before being able to send test emails." => "Você precisa configurar seu e-mail de usuário antes de ser capaz de enviar e-mails de teste.",
-"Send mode" => "Modo enviar",
-"Encryption" => "Criptografia",
-"Authentication method" => "Método de autenticação",
-"Unable to load list from App Store" => "Não foi possível carregar lista da App Store",
+"Enabled" => "Habilitado",
+"Not enabled" => "Desabilitado",
+"Recommended" => "Recomendado",
"Authentication error" => "Erro de autenticação",
"Your full name has been changed." => "Seu nome completo foi alterado.",
"Unable to change full name" => "Não é possível alterar o nome completo",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Senha de recuperação do administrador errada. Por favor verifique a senha e tente novamente.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Back-end não suporta alteração de senha, mas a chave de criptografia de usuários foi atualizado com sucesso....",
"Unable to change password" => "Impossível modificar senha",
+"Saved" => "Salvo",
+"test email settings" => "testar configurações de email",
+"If you received this email, the settings seem to be correct." => "Se você recebeu este e-mail, as configurações parecem estar corretas.",
+"A problem occurred while sending the email. Please revise your settings." => "Ocorreu um problema ao enviar o e-mail. Por favor, revise suas configurações.",
+"Email sent" => "E-mail enviado",
+"You need to set your user email before being able to send test emails." => "Você precisa configurar seu e-mail de usuário antes de ser capaz de enviar e-mails de teste.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" => "Adicionar domínio confiável",
"Sending..." => "Enviando...",
"All" => "Todos",
-"User Documentation" => "Documentação de Usuário",
-"Admin Documentation" => "Documentação de Administrador",
-"Update to {appversion}" => "Atualizar para {appversion}",
-"Uninstall App" => "Desinstalar Aplicativo",
-"Disable" => "Desabilitar",
-"Enable" => "Habilitar",
"Please wait...." => "Por favor, aguarde...",
"Error while disabling app" => "Erro enquanto desabilitava o aplicativo",
+"Disable" => "Desabilitar",
+"Enable" => "Habilitar",
"Error while enabling app" => "Erro enquanto habilitava o aplicativo",
"Updating...." => "Atualizando...",
"Error while updating app" => "Erro ao atualizar aplicativo",
-"Error" => "Erro",
-"Update" => "Atualizar",
"Updated" => "Atualizado",
"Uninstalling ...." => "Desinstalando ...",
"Error while uninstalling app" => "Erro enquanto desinstalava aplicativo",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Um nome de grupo válido deve ser fornecido",
"deleted {groupName}" => "eliminado {groupName}",
"undo" => "desfazer",
-"Group Admin" => "Grupo Administrativo",
+"no group" => "nenhum grupo",
"never" => "nunca",
"deleted {userName}" => "eliminado {userName}",
"add group" => "adicionar grupo",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Forneça uma senha válida",
"Warning: Home directory for user \"{user}\" already exists" => "Aviso: O diretório home para o usuário \"{user}\" já existe",
"__language_name__" => "__language_name__",
+"Personal Info" => "Informação Pessoal",
+"SSL root certificates" => "Certificados SSL raíz",
+"Encryption" => "Criptografia",
"Everything (fatal issues, errors, warnings, info, debug)" => "Tudo (questões fatais, erros, avisos, informações, depuração)",
"Info, warnings, errors and fatal issues" => "Informações, avisos, erros e problemas fatais",
"Warnings, errors and fatal issues" => "Avisos, erros e problemas fatais",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Por favor, se conectar ao seu %s via HTTPS para forçar ativar ou desativar SSL.",
"Email Server" => "Servidor de Email",
"This is used for sending out notifications." => "Isto é usado para o envio de notificações.",
+"Send mode" => "Modo enviar",
"From address" => "Do Endereço",
"mail" => "email",
+"Authentication method" => "Método de autenticação",
"Authentication required" => "Autenticação é requerida",
"Server address" => "Endereço do servidor",
"Port" => "Porta",
"Credentials" => "Credenciais",
"SMTP Username" => "Nome do Usuário SMTP",
"SMTP Password" => "Senha SMTP",
+"Store credentials" => "Armazenar credenciais",
"Test email settings" => "Configurações de e-mail de teste",
"Send email" => "Enviar email",
"Log" => "Registro",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versão",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolvido pela <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o <a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está licenciado sob <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Adicione seu Aplicativo",
-"More Apps" => "Mais Apps",
-"Select an App" => "Selecione um Aplicativo",
+"More apps" => "Mais aplicativos",
+"Add your app" => "Adicionar seu aplicativo",
+"by" => "por",
+"licensed" => "licenciado",
"Documentation:" => "Documentação:",
-"See application page at apps.owncloud.com" => "Ver página do aplicativo em apps.owncloud.com",
-"See application website" => "Consulte o site aplicação",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>",
+"User Documentation" => "Documentação de Usuário",
+"Admin Documentation" => "Documentação de Administrador",
+"Update to %s" => "Atualizado para %s",
"Enable only for specific groups" => "Ativar apenas para grupos específicos",
+"Uninstall App" => "Desinstalar Aplicativo",
"Administrator Documentation" => "Documentação de Administrador",
"Online Documentation" => "Documentação Online",
"Forum" => "Fórum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Escolha como imagem para o perfil",
"Language" => "Idioma",
"Help translate" => "Ajude a traduzir",
-"SSL root certificates" => "Certificados SSL raíz",
"Common Name" => "Nome",
"Valid until" => "Válido até",
"Issued By" => "Emitido Por",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Ilimitado",
"Other" => "Outro",
"Username" => "Nome de Usuário",
+"Group Admin for" => "Grupo Admin para",
"Quota" => "Cota",
"Storage Location" => "Local de Armazenamento",
"Last Login" => "Último Login",
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index ac318109742..363cf1959f7 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Valor dado a %s éinválido",
-"Saved" => "Guardado",
-"test email settings" => "testar configurações de email",
-"If you received this email, the settings seem to be correct." => "Se você recebeu este e-mail as configurações parecem estar correctas",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Ocorreu um erro ao enviar o email. Por favor verifique as definições.",
-"Email sent" => "E-mail enviado",
-"You need to set your user email before being able to send test emails." => "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
-"Send mode" => "Modo de envio",
-"Encryption" => "Encriptação",
-"Authentication method" => "Método de autenticação",
-"Unable to load list from App Store" => "Incapaz de carregar a lista da App Store",
+"Enabled" => "Ativada",
+"Not enabled" => "Desactivado",
+"Recommended" => "Recomendado",
"Authentication error" => "Erro na autenticação",
"Your full name has been changed." => "O seu nome completo foi alterado.",
"Unable to change full name" => "Não foi possível alterar o seu nome completo",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Palavra chave de recuperação de administrador errada. Por favor verifique a palavra chave e tente de novo.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Não foi possível alterar a sua palavra-passe, mas a chave de encriptação foi atualizada.",
"Unable to change password" => "Não foi possível alterar a sua password",
+"Saved" => "Guardado",
+"test email settings" => "testar configurações de email",
+"If you received this email, the settings seem to be correct." => "Se você recebeu este e-mail as configurações parecem estar correctas",
+"A problem occurred while sending the email. Please revise your settings." => "Um problema ocorreu ao enviar o email. Por favor verifique as suas definições.",
+"Email sent" => "E-mail enviado",
+"You need to set your user email before being able to send test emails." => "Você precisa de configurar o seu e-mail de usuário antes de ser capaz de enviar e-mails de teste",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?",
"Add trusted domain" => "Adicionar domínio confiável ",
"Sending..." => "A enviar...",
"All" => "Todos",
-"User Documentation" => "Documentação de Utilizador",
-"Admin Documentation" => "Documentação de administrador.",
-"Update to {appversion}" => "Actualizar para a versão {appversion}",
-"Uninstall App" => "Desinstalar aplicação",
-"Disable" => "Desactivar",
-"Enable" => "Activar",
"Please wait...." => "Por favor aguarde...",
"Error while disabling app" => "Erro enquanto desactivava a aplicação",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
"Error while enabling app" => "Erro enquanto activava a aplicação",
"Updating...." => "A Actualizar...",
"Error while updating app" => "Erro enquanto actualizava a aplicação",
-"Error" => "Erro",
-"Update" => "Actualizar",
"Updated" => "Actualizado",
"Uninstalling ...." => "Desinstalando ....",
"Error while uninstalling app" => "Erro durante a desinstalação da aplicação",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Um nome válido do grupo tem de ser fornecido",
"deleted {groupName}" => "apagar {Nome do grupo}",
"undo" => "desfazer",
-"Group Admin" => "Grupo Administrador",
+"no group" => "sem grupo",
"never" => "nunca",
"deleted {userName}" => "apagar{utilizador}",
"add group" => "Adicionar grupo",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Uma password válida deve ser fornecida",
"Warning: Home directory for user \"{user}\" already exists" => "Atenção: a pasta pessoal do utilizador \"{user}\" já existe",
"__language_name__" => "__language_name__",
+"Personal Info" => "Informação Pessoal",
+"SSL root certificates" => "Certificados SSL de raiz",
+"Encryption" => "Encriptação",
"Everything (fatal issues, errors, warnings, info, debug)" => "Tudo (problemas fatais, erros, avisos, informação, depuração)",
"Info, warnings, errors and fatal issues" => "Informação, avisos, erros e problemas fatais",
"Warnings, errors and fatal issues" => "Avisos, erros e problemas fatais",
@@ -118,6 +113,7 @@ $TRANSLATIONS = array(
"We strongly suggest to install the required packages on your system to support one of the following locales: %s." => "Recomendamos fortemente que instale no seu sistema todos os pacotes necessários para suportar os seguintes locales: %s.",
"URL generation in notification emails" => "Geração URL em e-mails de notificação",
"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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" => "Se a sua instalação não está instalada na raiz do domínio e usa o sistema cron, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwritewebroot\" no ficheiro config.php para o caminho webroot da sua instalação (sugestão: \"%s\")",
+"Connectivity checks" => "Verificações de conectividade",
"No problems found" => "Nenhum problema encontrado",
"Please double check the <a href='%s'>installation guides</a>." => "Por favor verifique <a href='%s'>installation guides</a>.",
"Cron" => "Cron",
@@ -147,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Por favor ligue-se a %s através de uma ligação HTTPS para ligar/desligar o uso de ligação por SSL",
"Email Server" => "Servidor de email",
"This is used for sending out notifications." => "Isto é utilizado para enviar notificações",
+"Send mode" => "Modo de envio",
"From address" => "Do endereço",
"mail" => "Correio",
+"Authentication method" => "Método de autenticação",
"Authentication required" => "Autenticação necessária",
"Server address" => "Endereço do servidor",
"Port" => "Porto",
"Credentials" => "Credenciais",
"SMTP Username" => "Nome de utilizador SMTP",
"SMTP Password" => "Password SMTP",
+"Store credentials" => "Armazenar credenciais",
"Test email settings" => "Testar configurações de email",
"Send email" => "Enviar email",
"Log" => "Registo",
@@ -163,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Menos",
"Version" => "Versão",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Desenvolvido pela <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunidade ownCloud</a>, o<a href=\"https://github.com/owncloud\" target=\"_blank\">código fonte</a> está licenciado sob a <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Adicione a sua aplicação",
-"More Apps" => "Mais Aplicações",
-"Select an App" => "Selecione uma aplicação",
+"More apps" => "Mais aplicações",
+"Add your app" => "Adicione a sua aplicação",
+"by" => "por",
+"licensed" => "licenciado",
"Documentation:" => "Documentação:",
-"See application page at apps.owncloud.com" => "Ver a página da aplicação em apps.owncloud.com",
-"See application website" => "Ver site da aplicação",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licenciado por <span class=\"author\"></span>",
+"User Documentation" => "Documentação de Utilizador",
+"Admin Documentation" => "Documentação de administrador.",
+"Update to %s" => "Actualizar para %s",
"Enable only for specific groups" => "Activar só para grupos específicos",
+"Uninstall App" => "Desinstalar aplicação",
"Administrator Documentation" => "Documentação de administrador.",
"Online Documentation" => "Documentação Online",
"Forum" => "Fórum",
@@ -200,8 +201,9 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Escolha uma fotografia de perfil",
"Language" => "Idioma",
"Help translate" => "Ajude a traduzir",
-"SSL root certificates" => "Certificados SSL de raiz",
+"Common Name" => "Nome Comum",
"Valid until" => "Válido até",
+"Issued By" => "Emitido Por",
"Valid until %s" => "Válido até %s",
"Import Root Certificate" => "Importar Certificado Root",
"The encryption app is no longer enabled, please decrypt all your files" => "A aplicação de encriptação já não está ativa, por favor desincripte todos os seus ficheiros",
@@ -226,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Ilimitado",
"Other" => "Outro",
"Username" => "Nome de utilizador",
+"Group Admin for" => "Administrador de Grupo para",
"Quota" => "Quota",
"Storage Location" => "Localização do Armazenamento",
"Last Login" => "Ultimo acesso",
diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php
index 4b566a4486a..a0cf5139e52 100644
--- a/settings/l10n/ro.php
+++ b/settings/l10n/ro.php
@@ -1,13 +1,7 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "Salvat",
-"test email settings" => "verifică setările de e-mail",
-"If you received this email, the settings seem to be correct." => "Dacă ai primit acest e-mail atunci setările par a fi corecte.",
-"Email sent" => "Mesajul a fost expediat",
-"Send mode" => "Modul de expediere",
-"Encryption" => "Încriptare",
-"Authentication method" => "Modul de autentificare",
-"Unable to load list from App Store" => "Imposibil de actualizat lista din App Store.",
+"Enabled" => "Activat",
+"Recommended" => "Recomandat",
"Authentication error" => "Eroare la autentificare",
"Your full name has been changed." => "Numele tău complet a fost schimbat.",
"Unable to change full name" => "Nu s-a puput schimba numele complet",
@@ -29,19 +23,19 @@ $TRANSLATIONS = array(
"Wrong password" => "Parolă greșită",
"No user supplied" => "Nici un utilizator furnizat",
"Unable to change password" => "Imposibil de schimbat parola",
+"Saved" => "Salvat",
+"test email settings" => "verifică setările de e-mail",
+"If you received this email, the settings seem to be correct." => "Dacă ai primit acest e-mail atunci setările par a fi corecte.",
+"Email sent" => "Mesajul a fost expediat",
"Sending..." => "Se expediază...",
"All" => "Toate ",
-"User Documentation" => "Documentație utilizator",
-"Update to {appversion}" => "Actualizat la {versiuneaaplicaţiei}",
-"Disable" => "Dezactivați",
-"Enable" => "Activare",
"Please wait...." => "Aşteptaţi vă rog....",
"Error while disabling app" => "Eroare în timpul dezactivării aplicației",
+"Disable" => "Dezactivați",
+"Enable" => "Activare",
"Error while enabling app" => "Eroare în timpul activării applicației",
"Updating...." => "Actualizare în curs....",
"Error while updating app" => "Eroare în timpul actualizării aplicaţiei",
-"Error" => "Eroare",
-"Update" => "Actualizare",
"Updated" => "Actualizat",
"Select a profile picture" => "Selectează o imagine de profil",
"Very weak password" => "Parolă foarte slabă",
@@ -52,7 +46,6 @@ $TRANSLATIONS = array(
"Decrypting files... Please wait, this can take some time." => "Decriptare fișiere... Te rog așteaptă, poate dura ceva timp.",
"Groups" => "Grupuri",
"undo" => "Anulează ultima acțiune",
-"Group Admin" => "Grupul Admin ",
"never" => "niciodată",
"add group" => "adăugaţi grupul",
"A valid username must be provided" => "Trebuie să furnizaţi un nume de utilizator valid",
@@ -60,6 +53,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Trebuie să furnizaţi o parolă validă",
"Warning: Home directory for user \"{user}\" already exists" => "Avertizare: Dosarul Acasă pentru utilizatorul \"{user}\" deja există",
"__language_name__" => "_language_name_",
+"SSL root certificates" => "Certificate SSL root",
+"Encryption" => "Încriptare",
"None" => "Niciuna",
"Login" => "Autentificare",
"SSL" => "SSL",
@@ -80,6 +75,8 @@ $TRANSLATIONS = array(
"Allow users to send mail notification for shared files" => "Permite utilizatorilor sa expedieze notificări prin e-mail pentru dosarele comune",
"Security" => "Securitate",
"Forces the clients to connect to %s via an encrypted connection." => "Forțează clienții să se conecteze la %s folosind o conexiune sigură",
+"Send mode" => "Modul de expediere",
+"Authentication method" => "Modul de autentificare",
"Server address" => "Adresa server-ului",
"Port" => "Portul",
"SMTP Username" => "Nume utilizator SMTP",
@@ -92,11 +89,8 @@ $TRANSLATIONS = array(
"Less" => "Mai puțin",
"Version" => "Versiunea",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Dezvoltat de the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">comunitatea ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">codul sursă</a> este licențiat sub <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Adaugă aplicația ta",
-"More Apps" => "Mai multe aplicații",
-"Select an App" => "Selectează o aplicație",
-"See application page at apps.owncloud.com" => "Vizualizează pagina applicației pe apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licențiat <span class=\"author\"></span>",
+"by" => "după",
+"User Documentation" => "Documentație utilizator",
"Administrator Documentation" => "Documentație administrator",
"Online Documentation" => "Documentație online",
"Forum" => "Forum",
@@ -122,7 +116,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Alege drept imagine de profil",
"Language" => "Limba",
"Help translate" => "Ajută la traducere",
-"SSL root certificates" => "Certificate SSL root",
"Import Root Certificate" => "Importă certificat root",
"Log-in password" => "Parolă",
"Decrypt all Files" => "Decriptează toate fișierele",
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index e9f41756919..7e3c8368951 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Неверное значение для %s",
-"Saved" => "Сохранено",
-"test email settings" => "проверить настройки почты",
-"If you received this email, the settings seem to be correct." => "Если вы получили это письмо, настройки верны.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Произошла ошибка при отправке сообщения электронной почты, пожалуйста, пожалуйста проверьте настройки.",
-"Email sent" => "Письмо отправлено",
-"You need to set your user email before being able to send test emails." => "Вы должны настроить свой e-mail пользователя прежде чем отправлять тестовые сообщения.",
-"Send mode" => "Отправить сообщение",
-"Encryption" => "Шифрование",
-"Authentication method" => "Метод проверки подлинности",
-"Unable to load list from App Store" => "Не удалось загрузить список из App Store",
+"Enabled" => "Включено",
"Authentication error" => "Ошибка аутентификации",
"Your full name has been changed." => "Ваше полное имя было изменено.",
"Unable to change full name" => "Невозможно изменить полное имя",
@@ -40,23 +30,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Неправильный пароль восстановления. Проверьте пароль и попробуйте еще раз.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён",
"Unable to change password" => "Невозможно изменить пароль",
+"Saved" => "Сохранено",
+"test email settings" => "проверить настройки почты",
+"If you received this email, the settings seem to be correct." => "Если вы получили это письмо, настройки верны.",
+"Email sent" => "Письмо отправлено",
+"You need to set your user email before being able to send test emails." => "Вы должны настроить свой e-mail пользователя прежде чем отправлять тестовые сообщения.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Вы действительно хотите добавить домен \"{domain}\" как доверенный?",
"Add trusted domain" => "Добавить доверенный домен",
"Sending..." => "Отправляется ...",
"All" => "Все",
-"User Documentation" => "Пользовательская документация",
-"Admin Documentation" => "Документация администратора",
-"Update to {appversion}" => "Обновить до {версия приложения}",
-"Uninstall App" => "Удалить приложение",
-"Disable" => "Выключить",
-"Enable" => "Включить",
"Please wait...." => "Подождите...",
"Error while disabling app" => "Ошибка отключения приложения",
+"Disable" => "Выключить",
+"Enable" => "Включить",
"Error while enabling app" => "Ошибка включения приложения",
"Updating...." => "Обновление...",
"Error while updating app" => "Ошибка при обновлении приложения",
-"Error" => "Ошибка",
-"Update" => "Обновить",
"Updated" => "Обновлено",
"Uninstalling ...." => "Удаление ...",
"Error while uninstalling app" => "Ошибка при удалении приложения.",
@@ -78,7 +67,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Введите правильное имя группы",
"deleted {groupName}" => "удалено {groupName}",
"undo" => "отмена",
-"Group Admin" => "Администратор группы",
"never" => "никогда",
"deleted {userName}" => "удалён {userName}",
"add group" => "добавить группу",
@@ -87,6 +75,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Укажите валидный пароль",
"Warning: Home directory for user \"{user}\" already exists" => "Предупреждение: домашняя папка пользователя \"{user}\" уже существует",
"__language_name__" => "Русский ",
+"SSL root certificates" => "Корневые сертификаты SSL",
+"Encryption" => "Шифрование",
"Everything (fatal issues, errors, warnings, info, debug)" => "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)",
"Info, warnings, errors and fatal issues" => "Информационные, предупреждения, ошибки и критические проблемы",
"Warnings, errors and fatal issues" => "Предупреждения, ошибки и критические проблемы",
@@ -148,8 +138,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Пожалуйста, подключитесь к %s используя HTTPS чтобы включить или отключить обязательные SSL подключения.",
"Email Server" => "Почтовый сервер",
"This is used for sending out notifications." => "Используется для отправки уведомлений.",
+"Send mode" => "Отправить сообщение",
"From address" => "Адрес отправителя",
"mail" => "почта",
+"Authentication method" => "Метод проверки подлинности",
"Authentication required" => "Требуется аутентификация ",
"Server address" => "Адрес сервера",
"Port" => "Порт",
@@ -164,14 +156,13 @@ $TRANSLATIONS = array(
"Less" => "Меньше",
"Version" => "Версия",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Разрабатывается <a href=\"http://ownCloud.org/contact\" target=\"_blank\">сообществом ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">исходный код</a> доступен под лицензией <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Добавить приложение",
-"More Apps" => "Больше приложений",
-"Select an App" => "Выберите приложение",
+"More apps" => "Ещё приложения",
+"by" => ":",
"Documentation:" => "Документация:",
-"See application page at apps.owncloud.com" => "Смотрите дополнения на apps.owncloud.com",
-"See application website" => "См. сайт приложений",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span> лицензия. Автор <span class=\"author\"></span>",
+"User Documentation" => "Пользовательская документация",
+"Admin Documentation" => "Документация администратора",
"Enable only for specific groups" => "Включить только для этих групп",
+"Uninstall App" => "Удалить приложение",
"Administrator Documentation" => "Документация администратора",
"Online Documentation" => "Online документация",
"Forum" => "Форум",
@@ -201,7 +192,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Установить как аватар",
"Language" => "Язык",
"Help translate" => "Помочь с переводом",
-"SSL root certificates" => "Корневые сертификаты SSL",
"Common Name" => "Общее Имя",
"Valid until" => "Действительно до",
"Issued By" => "Выдан",
diff --git a/settings/l10n/si_LK.php b/settings/l10n/si_LK.php
index 36686372978..e254e447640 100644
--- a/settings/l10n/si_LK.php
+++ b/settings/l10n/si_LK.php
@@ -1,6 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Encryption" => "ගුප්ත කේතනය",
"Authentication error" => "සත්‍යාපන දෝෂයක්",
"Group already exists" => "කණ්ඩායම දැනටමත් තිබේ",
"Unable to add group" => "කාණඩයක් එක් කළ නොහැකි විය",
@@ -14,13 +13,12 @@ $TRANSLATIONS = array(
"Unable to remove user from group %s" => "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක",
"Disable" => "අක්‍රිය කරන්න",
"Enable" => "සක්‍රිය කරන්න",
-"Error" => "දෝෂයක්",
-"Update" => "යාවත්කාල කිරීම",
"Delete" => "මකා දමන්න",
"Groups" => "කණ්ඩායම්",
"undo" => "නිෂ්ප්‍රභ කරන්න",
-"Group Admin" => "කාණ්ඩ පරිපාලක",
"never" => "කවදාවත්",
+"SSL root certificates" => "SSL මූල සහතිකයන්",
+"Encryption" => "ගුප්ත කේතනය",
"None" => "කිසිවක් නැත",
"Login" => "ප්‍රවිශ්ටය",
"Security Warning" => "ආරක්ෂක නිවේදනයක්",
@@ -32,9 +30,7 @@ $TRANSLATIONS = array(
"More" => "වැඩි",
"Less" => "අඩු",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "නිපදන ලද්දේ <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud සමාජයෙන්</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">මුල් කේතය </a>ලයිසන්ස් කර ඇත්තේ <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> යටතේ.",
-"Add your App" => "යෙදුමක් එක් කිරීම",
-"More Apps" => "තවත් යෙදුම්",
-"Select an App" => "යෙදුමක් තොරන්න",
+"by" => "විසින්",
"Password" => "මුර පදය",
"Your password was changed" => "ඔබගේ මුර පදය වෙනස් කෙරුණි",
"Unable to change your password" => "මුර පදය වෙනස් කළ නොහැකි විය",
@@ -46,7 +42,6 @@ $TRANSLATIONS = array(
"Cancel" => "එපා",
"Language" => "භාෂාව",
"Help translate" => "පරිවර්ථන සහය",
-"SSL root certificates" => "SSL මූල සහතිකයන්",
"Import Root Certificate" => "මූල සහතිකය ආයාත කරන්න",
"Login Name" => "ප්‍රවිශ්ටය",
"Create" => "තනන්න",
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
index eb70ba50973..5dcfdf6c9dc 100644
--- a/settings/l10n/sk_SK.php
+++ b/settings/l10n/sk_SK.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Zadaná neplatná hodnota pre %s",
-"Saved" => "Uložené",
-"test email settings" => "nastavenia testovacieho emailu",
-"If you received this email, the settings seem to be correct." => "Ak ste dostali tento email, nastavenie je správne.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Vyskytol sa problém pri odosielaní emailu. Prosím, znovu skontrolujte svoje nastavenia.",
-"Email sent" => "Email odoslaný",
-"You need to set your user email before being able to send test emails." => "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
-"Send mode" => "Mód odosielania",
-"Encryption" => "Šifrovanie",
-"Authentication method" => "Autentifikačná metóda",
-"Unable to load list from App Store" => "Nie je možné nahrať zoznam z App Store",
+"Enabled" => "Povolené",
"Authentication error" => "Chyba autentifikácie",
"Your full name has been changed." => "Vaše meno a priezvisko bolo zmenené.",
"Unable to change full name" => "Nemožno zmeniť meno a priezvisko",
@@ -40,23 +30,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Chybné administrátorské heslo pre obnovu. Skontrolujte správnosť hesla a skúste to znovu.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Úložisko nepodporuje zmenu hesla, ale šifrovací kľúč používateľov bol úspešne zmenený.",
"Unable to change password" => "Zmena hesla sa nepodarila",
+"Saved" => "Uložené",
+"test email settings" => "nastavenia testovacieho emailu",
+"If you received this email, the settings seem to be correct." => "Ak ste dostali tento email, nastavenie je správne.",
+"Email sent" => "Email odoslaný",
+"You need to set your user email before being able to send test emails." => "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?",
"Add trusted domain" => "Pridať dôveryhodnú doménu",
"Sending..." => "Odosielam...",
"All" => "Všetky",
-"User Documentation" => "Príručka používateľa",
-"Admin Documentation" => "Príručka administrátora",
-"Update to {appversion}" => "Aktualizovať na {appversion}",
-"Uninstall App" => "Odinštalovanie aplikácie",
-"Disable" => "Zakázať",
-"Enable" => "Zapnúť",
"Please wait...." => "Čakajte prosím...",
"Error while disabling app" => "Chyba pri zakázaní aplikácie",
+"Disable" => "Zakázať",
+"Enable" => "Zapnúť",
"Error while enabling app" => "Chyba pri povoľovaní aplikácie",
"Updating...." => "Aktualizujem...",
"Error while updating app" => "chyba pri aktualizácii aplikácie",
-"Error" => "Chyba",
-"Update" => "Aktualizovať",
"Updated" => "Aktualizované",
"Uninstalling ...." => "Prebieha odinštalovanie...",
"Error while uninstalling app" => "Chyba pri odinštalovaní aplikácie",
@@ -78,7 +67,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Musíte zadať platný názov skupiny",
"deleted {groupName}" => "vymazaná {groupName}",
"undo" => "vrátiť",
-"Group Admin" => "Správca skupiny",
"never" => "nikdy",
"deleted {userName}" => "vymazané {userName}",
"add group" => "pridať skupinu",
@@ -87,6 +75,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Musíte zadať platné heslo",
"Warning: Home directory for user \"{user}\" already exists" => "Upozornenie: Domovský priečinok používateľa \"{user}\" už existuje",
"__language_name__" => "Slovensky",
+"SSL root certificates" => "Koreňové SSL certifikáty",
+"Encryption" => "Šifrovanie",
"Everything (fatal issues, errors, warnings, info, debug)" => "Všetko (fatálne problémy, chyby, upozornenia, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, upozornenia, chyby a fatálne problémy",
"Warnings, errors and fatal issues" => "Upozornenia, chyby a fatálne problémy",
@@ -146,8 +136,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Pripojte sa k %s cez HTTPS pre povolenie alebo zakázanie vynútenia SSL.",
"Email Server" => "Email server",
"This is used for sending out notifications." => "Používa sa na odosielanie upozornení.",
+"Send mode" => "Mód odosielania",
"From address" => "Z adresy",
"mail" => "email",
+"Authentication method" => "Autentifikačná metóda",
"Authentication required" => "Vyžaduje sa overenie",
"Server address" => "Adresa servera",
"Port" => "Port",
@@ -162,14 +154,13 @@ $TRANSLATIONS = array(
"Less" => "Menej",
"Version" => "Verzia",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Vyvinuté <a href=\"http://ownCloud.org/contact\" target=\"_blank\">komunitou ownCloud</a>,<a href=\"https://github.com/owncloud\" target=\"_blank\">zdrojový kód</a> je licencovaný pod <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Pridať vašu aplikáciu",
-"More Apps" => "Viac aplikácií",
-"Select an App" => "Vyberte aplikáciu",
+"More apps" => "Viac aplikácií",
+"by" => "od",
"Documentation:" => "Dokumentácia:",
-"See application page at apps.owncloud.com" => "Pozrite si stránku aplikácií na apps.owncloud.com",
-"See application website" => "Pozrite si webstránku aplikácie",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licencované <span class=\"author\"></span>",
+"User Documentation" => "Príručka používateľa",
+"Admin Documentation" => "Príručka administrátora",
"Enable only for specific groups" => "Povoliť len pre vybrané skupiny",
+"Uninstall App" => "Odinštalovanie aplikácie",
"Administrator Documentation" => "Príručka administrátora",
"Online Documentation" => "Online príručka",
"Forum" => "Fórum",
@@ -199,7 +190,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Vybrať ako avatara",
"Language" => "Jazyk",
"Help translate" => "Pomôcť s prekladom",
-"SSL root certificates" => "Koreňové SSL certifikáty",
"Common Name" => "Bežný názov",
"Valid until" => "Platný do",
"Issued By" => "Vydal",
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
index 7ae016dd97e..9866e44afa0 100644
--- a/settings/l10n/sl.php
+++ b/settings/l10n/sl.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Navedena je napačna vrednost za %s",
-"Saved" => "Shranjeno",
-"test email settings" => "preizkusi nastavitve elektronske pošte",
-"If you received this email, the settings seem to be correct." => "Če ste prejeli to sporočilo, so nastavitve pravilne.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Prišlo je do napake med pošiljanjem sporočila na elektronski naslov. Spremeniti je treba nastavitve.",
-"Email sent" => "Elektronska pošta je poslana",
-"You need to set your user email before being able to send test emails." => "Pred preizkusnim pošiljanjem sporočil je treba nastaviti elektronski naslov uporabnika.",
-"Send mode" => "Način pošiljanja",
-"Encryption" => "Šifriranje",
-"Authentication method" => "Način overitve",
-"Unable to load list from App Store" => "Ni mogoče naložiti seznama iz programskega središča",
+"Enabled" => "Omogočeno",
+"Not enabled" => "Ni omogočeno",
+"Recommended" => "Priporočljivo",
"Authentication error" => "Napaka med overjanjem",
"Your full name has been changed." => "Vaše polno ime je spremenjeno.",
"Unable to change full name" => "Ni mogoče spremeniti polnega imena",
@@ -19,12 +11,15 @@ $TRANSLATIONS = array(
"Files decrypted successfully" => "Datoteke so uspešno odšifrirane",
"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" => "Datotek ni mogoče odšifrirati. Preverite dnevnik owncloud.log ali pa se posvetujte s skrbnikom.",
"Couldn't decrypt your files, check your password and try again" => "Datotek ni mogoče odšifrirati. Preverite geslo in poskusite znova.",
+"Encryption keys deleted permanently" => "Šifrirni ključi so trajno izbrisani",
+"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" => "Ni mogoče trajno izbrisati šifrirnih ključev. Preverite dnevnik owncloud.log ali pa stopite v stik s skrbnikom sistema.",
"Couldn't remove app." => "Ni mogoče odstraniti programa.",
"Email saved" => "Elektronski naslov je shranjen",
"Invalid email" => "Neveljaven elektronski naslov",
"Unable to delete group" => "Skupine ni mogoče izbrisati",
"Unable to delete user" => "Uporabnika ni mogoče izbrisati",
"Backups restored successfully" => "Varnostne kopije so uspešno obnovljene.",
+"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" => "Ni mogoče obnoviti šifrirnih ključev. Preverite dnevnik owncloud.log ali pa stopite v stik s skrbnikom sistema.",
"Language changed" => "Jezik je spremenjen",
"Invalid request" => "Neveljavna zahteva",
"Admins can't remove themself from the admin group" => "Skrbnikov ni mogoče odstraniti iz skupine skrbnikov (admin)",
@@ -37,22 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Napačno navedeno skrbniško obnovitveno geslo. Preverite geslo in poskusite znova.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Hrbtišče programa ne podpira spreminjanja gesla, je pa uspešno posodobljeno uporabniško šifriranje.",
"Unable to change password" => "Ni mogoče spremeniti gesla",
+"Saved" => "Shranjeno",
+"test email settings" => "preizkusi nastavitve elektronske pošte",
+"If you received this email, the settings seem to be correct." => "Če ste prejeli to sporočilo, so nastavitve pravilne.",
+"A problem occurred while sending the email. Please revise your settings." => "Prišlo je do napake med pošiljanjem sporočila na elektronski naslov. Spremeniti je treba nastavitve.",
+"Email sent" => "Elektronska pošta je poslana",
+"You need to set your user email before being able to send test emails." => "Pred preizkusnim pošiljanjem sporočil je treba nastaviti elektronski naslov uporabnika.",
+"Are you really sure you want add \"{domain}\" as trusted domain?" => "Ali ste prepričani, da želite dodati \"{domain}\" kot varno domeno?",
"Add trusted domain" => "Dodaj varno domeno",
"Sending..." => "Poteka pošiljanje ...",
"All" => "Vsi",
-"User Documentation" => "Uporabniška dokumentacija",
-"Admin Documentation" => "Skrbniška dokumentacija",
-"Update to {appversion}" => "Posodobi na {appversion}",
-"Uninstall App" => "Odstrani program",
-"Disable" => "Onemogoči",
-"Enable" => "Omogoči",
"Please wait...." => "Počakajte ...",
"Error while disabling app" => "Napaka onemogočanja programa",
+"Disable" => "Onemogoči",
+"Enable" => "Omogoči",
"Error while enabling app" => "Napaka omogočanja programa",
"Updating...." => "Poteka posodabljanje ...",
"Error while updating app" => "Prišlo je do napake med posodabljanjem programa.",
-"Error" => "Napaka",
-"Update" => "Posodobi",
"Updated" => "Posodobljeno",
"Uninstalling ...." => "Odstranjevanje namestitve ...",
"Error while uninstalling app" => "Prišlo je do napake med odstranjevanjem programa.",
@@ -63,6 +59,7 @@ $TRANSLATIONS = array(
"So-so password" => "Slabo geslo",
"Good password" => "Dobro geslo",
"Strong password" => "Odlično geslo",
+"Valid until {date}" => "Veljavno do {date}",
"Delete" => "Izbriši",
"Decrypting files... Please wait, this can take some time." => "Poteka odšifriranje datotek ... Opravilo je lahko dolgotrajno.",
"Delete encryption keys permanently." => "Trajno izbriše šifrirne ključe",
@@ -70,15 +67,21 @@ $TRANSLATIONS = array(
"Groups" => "Skupine",
"Unable to delete {objName}" => "Ni mogoče izbrisati {objName}",
"Error creating group" => "Napaka ustvarjanja skupine",
+"A valid group name must be provided" => "Navedeno mora biti veljavno ime skupine",
+"deleted {groupName}" => "izbrisano {groupName}",
"undo" => "razveljavi",
-"Group Admin" => "Skrbnik skupine",
+"no group" => "ni skupine",
"never" => "nikoli",
+"deleted {userName}" => "izbrisano {userName}",
"add group" => "dodaj skupino",
"A valid username must be provided" => "Navedeno mora biti veljavno uporabniško ime",
"Error creating user" => "Napaka ustvarjanja uporabnika",
"A valid password must be provided" => "Navedeno mora biti veljavno geslo",
"Warning: Home directory for user \"{user}\" already exists" => "Opozorilo: osebna mapa uporabnika \"{user}\" že obstaja",
"__language_name__" => "Slovenščina",
+"Personal Info" => "Osebni podatki",
+"SSL root certificates" => "Korenska potrdila SSL",
+"Encryption" => "Šifriranje",
"Everything (fatal issues, errors, warnings, info, debug)" => "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)",
"Info, warnings, errors and fatal issues" => "Podrobnosti, opozorila, napake in usodne dogodke",
"Warnings, errors and fatal issues" => "Opozorila, napake in usodne dogodke",
@@ -94,23 +97,29 @@ $TRANSLATIONS = array(
"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." => "Dostop do %s poteka preko HTTP. Priporočljivo je nastaviti strežnik na privzeto uporabo varne povezave preko protokola HTTPS.",
"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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Vaša podatkovna mapa in datoteke so najverjetneje dosegljive preko interneta. Datoteka .htaccess ni ustrezno nastavljena. Priporočljivo je nastaviti spletni strežnik tako, da podatkovna mapa ni prosto dostopna. To je mogoče zagotoviti tudi tako, da je mapa premaknjena iz neustrezne korenske v podrejeno mapo .",
"Setup Warning" => "Opozorilo nastavitve",
+"Database Performance Info" => "Podrobnosti delovanja podatkovne zbirke",
"Module 'fileinfo' missing" => "Manjka modul 'fileinfo'.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.",
"Your PHP version is outdated" => "Nameščena različica PHP je zastarela",
"Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." => "Nameščena različica PHP je zastarela. Priporočljivo je posodobiti namestitev na različico 5.3.8 ali novejše, saj starejše različice ne podpirajo vseh zmožnosti. Mogoče je, da namestitev ne deluje pravilno.",
+"PHP charset is not set to UTF-8" => "Jezikovni znakovni nabor PHP ni določen kot UTF-8",
"Locale not working" => "Jezikovne prilagoditve ne delujejo.",
"System locale can not be set to a one which supports UTF-8." => "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.",
"This means that there might be problems with certain characters in file names." => "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.",
"We strongly suggest to install the required packages on your system to support one of the following locales: %s." => "Priporočljivo je namestiti zahtevane pakete v sistem za podporo ene izmed navedenih jezikovnih možnosti: %s",
+"Connectivity checks" => "Preverjanje povezav",
+"No problems found" => "Ni zaznanih težav",
"Please double check the <a href='%s'>installation guides</a>." => "Preverite <a href='%s'>navodila namestitve</a>.",
"Cron" => "Periodično opravilo",
-"Last cron was executed at %s." => "Zadnje opravilo cron je bilo izvedeno ob %s.",
-"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Zadnje opravilo cron je bilo izvedeno ob %s. To je več kot uro nazaj. Nekaj je očitno narobe.",
-"Cron was not executed yet!" => "Opravilo Cron še ni zagnano!",
+"Last cron was executed at %s." => "Zadnje periodično opravilo cron je bilo izvedeno ob %s.",
+"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Zadnje periodično opravilo cron je bilo izvedeno ob %s. To je več kot uro nazaj. Nekaj je očitno narobe.",
+"Cron was not executed yet!" => "Periodično opravilo cron še ni zagnano!",
"Execute one task with each page loaded" => "Izvedi eno nalogo z vsako naloženo stranjo.",
-"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "Datoteka cron.php je vpisana v storitvi webcron za potrditev sklica vsakih 15 minut pri povezavi preko HTTP.",
+"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "Datoteka cron.php je vpisana za periodično opravilo webcron za potrditev sklica vsakih 15 minut pri povezavi preko HTTP.",
+"Use system's cron service to call the cron.php file every 15 minutes." => "Uporabi storitev periodičnih opravil za klic datoteke cron.php vsakih 15 minut.",
"Sharing" => "Souporaba",
"Allow apps to use the Share API" => "Dovoli programom uporabo vmesnika API souporabe",
+"Allow users to share via link" => "Uporabnikom dovoli omogočanje souporabe s povezavami",
"Enforce password protection" => "Vsili zaščito z geslom",
"Allow public uploads" => "Dovoli javno pošiljanje datotek v oblak",
"Set default expiration date" => "Nastavitev privzetega datuma poteka",
@@ -118,19 +127,26 @@ $TRANSLATIONS = array(
"days" => "dneh",
"Enforce expiration date" => "Vsili datum preteka",
"Allow resharing" => "Dovoli nadaljnjo souporabo",
+"Restrict users to only share with users in their groups" => "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine",
"Allow users to send mail notification for shared files" => "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.",
"Exclude groups from sharing" => "Izloči skupine iz souporabe",
+"These groups will still be able to receive shares, but not to initiate them." => "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti",
"Security" => "Varnost",
"Enforce HTTPS" => "Zahtevaj uporabo HTTPS",
"Forces the clients to connect to %s via an encrypted connection." => "Vsili povezavo odjemalca z %s preko šifrirane povezave.",
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Za nastavljanje šifriranja SSL je treba vzpostaviti povezavo z mestom %s preko protokola HTTPS.",
"Email Server" => "Poštni strežnik",
+"This is used for sending out notifications." => "Možnost je uporabljena za omogočanje pošiljanja obvestil.",
+"Send mode" => "Način pošiljanja",
+"From address" => "Naslov pošiljatelja",
+"Authentication method" => "Način overitve",
"Authentication required" => "Zahtevana je overitev",
"Server address" => "Naslov strežnika",
"Port" => "Vrata",
"Credentials" => "Poverila",
"SMTP Username" => "Uporabniško ime SMTP",
"SMTP Password" => "Geslo SMTP",
+"Store credentials" => "Shrani poverila",
"Test email settings" => "Preizkus nastavitev elektronske pošte",
"Send email" => "Pošlji elektronsko sporočilo",
"Log" => "Dnevnik",
@@ -139,14 +155,15 @@ $TRANSLATIONS = array(
"Less" => "Manj",
"Version" => "Različica",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Programski paket razvija <a href=\"http://ownCloud.org/contact\" target=\"_blank\">skupnost ownCloud</a>. <a href=\"https://github.com/owncloud\" target=\"_blank\">Izvorna koda</a> je objavljena pod pogoji <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Splošnega javnega dovoljenja Affero\">AGPL</abbr></a>.",
-"Add your App" => "Dodaj program",
-"More Apps" => "Več programov",
-"Select an App" => "Izbor programa",
+"More apps" => "Več programov",
+"Add your app" => "Dodajte program",
+"by" => "od",
"Documentation:" => "Dokumentacija:",
-"See application page at apps.owncloud.com" => "Obiščite spletno stran programa na apps.owncloud.com",
-"See application website" => "Oglejte si spletno stran programa",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-z dovoljenjem <span class=\"author\"></span>",
+"User Documentation" => "Uporabniška dokumentacija",
+"Admin Documentation" => "Skrbniška dokumentacija",
+"Update to %s" => "Posodobi na %s",
"Enable only for specific groups" => "Omogoči le za posamezne skupine",
+"Uninstall App" => "Odstrani program",
"Administrator Documentation" => "Skrbniška dokumentacija",
"Online Documentation" => "Spletna dokumentacija",
"Forum" => "Forum",
@@ -175,15 +192,18 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Izberi kot sliko profila",
"Language" => "Jezik",
"Help translate" => "Sodelujte pri prevajanju",
-"SSL root certificates" => "Korenska potrdila SSL",
"Common Name" => "Splošno ime",
"Valid until" => "Veljavno do",
+"Issued By" => "Izdajatelj",
+"Valid until %s" => "Veljavno do %s",
"Import Root Certificate" => "Uvozi korensko potrdilo",
"The encryption app is no longer enabled, please decrypt all your files" => "Program za šifriranje ni več omogočen. Odšifrirati je treba vse datoteke.",
"Log-in password" => "Prijavno geslo",
"Decrypt all Files" => "Odšifriraj vse datoteke",
"Restore Encryption Keys" => "Obnovi šifrirne ključe",
"Delete Encryption Keys" => "Izbriši šifrirne ključe",
+"Show storage location" => "Pokaži mesto shrambe",
+"Show last log in" => "Pokaži podatke zadnje prijave",
"Login Name" => "Prijavno ime",
"Create" => "Ustvari",
"Admin Recovery Password" => "Obnovitev skrbniškega gesla",
@@ -198,7 +218,9 @@ $TRANSLATIONS = array(
"Unlimited" => "Neomejeno",
"Other" => "Drugo",
"Username" => "Uporabniško ime",
+"Group Admin for" => "Skrbnik skupine za",
"Quota" => "Količinska omejitev",
+"Storage Location" => "Mesto shrambe",
"Last Login" => "Zadnja prijava",
"change full name" => "Spremeni polno ime",
"set new password" => "nastavi novo geslo",
diff --git a/settings/l10n/sq.php b/settings/l10n/sq.php
index 4ba1a87b855..e09d1ed128b 100644
--- a/settings/l10n/sq.php
+++ b/settings/l10n/sq.php
@@ -1,10 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Saved" => "U ruajt",
-"Email sent" => "Email-i u dërgua",
-"Send mode" => "Mënyra e dërgimit",
-"Encryption" => "Kodifikimi",
-"Unable to load list from App Store" => "E pamundur të shkarkohet lista nga App Store",
"Authentication error" => "Gabim autentifikimi",
"Group already exists" => "Grupi ekziston",
"Unable to add group" => "E pamundur të shtohet grupi",
@@ -20,24 +15,21 @@ $TRANSLATIONS = array(
"Couldn't update app." => "E pamundur të përditësohet app.",
"Wrong password" => "Fjalëkalim i gabuar",
"Unable to change password" => "Fjalëkalimi nuk mund të ndryshohet",
+"Saved" => "U ruajt",
+"Email sent" => "Email-i u dërgua",
"Sending..." => "Duke dërguar",
"All" => "Të gjitha",
-"User Documentation" => "Dokumentacion përdoruesi",
-"Update to {appversion}" => "Përditësim për {appversion}",
+"Please wait...." => "Ju lutem prisni...",
"Disable" => "Çaktivizo",
"Enable" => "Aktivizo",
-"Please wait...." => "Ju lutem prisni...",
"Updating...." => "Duke përditësuar...",
"Error while updating app" => "Gabim gjatë përditësimit të app",
-"Error" => "Gabim",
-"Update" => "Përditësim",
"Updated" => "I përditësuar",
"Select a profile picture" => "Zgjidh një foto profili",
"Delete" => "Fshi",
"Groups" => "Grupet",
"deleted {groupName}" => "u fshi {groupName}",
"undo" => "anullo veprimin",
-"Group Admin" => "Grupi Admin",
"never" => "asnjëherë",
"deleted {userName}" => "u fshi {userName}",
"add group" => "shto grup",
@@ -45,6 +37,7 @@ $TRANSLATIONS = array(
"Error creating user" => "Gabim gjatë krijimit të përdoruesit",
"A valid password must be provided" => "Duhet të jepni një fjalëkalim te vlefshëm",
"__language_name__" => "Shqip",
+"Encryption" => "Kodifikimi",
"None" => "Asgjë",
"Login" => "Hyr",
"Security Warning" => "Njoftim për sigurinë",
@@ -63,6 +56,7 @@ $TRANSLATIONS = array(
"Allow resharing" => "Lejo ri-ndarjen",
"Security" => "Siguria",
"Enforce HTTPS" => "Detyro HTTPS",
+"Send mode" => "Mënyra e dërgimit",
"From address" => "Nga adresa",
"mail" => "postë",
"Server address" => "Adresa e serverit",
@@ -75,12 +69,9 @@ $TRANSLATIONS = array(
"Less" => "M'pak",
"Version" => "Versioni",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Zhvilluar nga <a href=\"http://ownCloud.org/contact\" target=\"_blank\">Komuniteti OwnCloud</a>, gjithashtu <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> është licensuar me anë të <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Shtoni apliakcionin tuaj",
-"More Apps" => "Apliakcione të tjera",
-"Select an App" => "Zgjidhni një Aplikacion",
+"by" => "nga",
"Documentation:" => "Dokumentacioni:",
-"See application page at apps.owncloud.com" => "Shihni faqen e aplikacionit tek apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licensuar nga <span class=\"author\"></span>",
+"User Documentation" => "Dokumentacion përdoruesi",
"Administrator Documentation" => "Dokumentacion administratori",
"Online Documentation" => "Dokumentacion online",
"Forum" => "Forumi",
diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php
index f5bd74c80f3..eced1165e82 100644
--- a/settings/l10n/sr.php
+++ b/settings/l10n/sr.php
@@ -1,8 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Порука је послата",
-"Encryption" => "Шифровање",
-"Unable to load list from App Store" => "Грешка приликом учитавања списка из Складишта Програма",
"Authentication error" => "Грешка при провери идентитета",
"Group already exists" => "Група већ постоји",
"Unable to add group" => "Не могу да додам групу",
@@ -16,26 +13,23 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "Не могу да додам корисника у групу %s",
"Unable to remove user from group %s" => "Не могу да уклоним корисника из групе %s",
"Couldn't update app." => "Не могу да ажурирам апликацију.",
-"User Documentation" => "Корисничка документација",
-"Update to {appversion}" => "Ажурирај на {appversion}",
+"Email sent" => "Порука је послата",
+"Please wait...." => "Сачекајте…",
"Disable" => "Искључи",
"Enable" => "Омогући",
-"Please wait...." => "Сачекајте…",
"Updating...." => "Ажурирам…",
"Error while updating app" => "Грешка при ажурирању апликације",
-"Error" => "Грешка",
-"Update" => "Ажурирај",
"Updated" => "Ажурирано",
"Delete" => "Обриши",
"Groups" => "Групе",
"undo" => "опозови",
-"Group Admin" => "Управник групе",
"never" => "никада",
"add group" => "додај групу",
"A valid username must be provided" => "Морате унети исправно корисничко име",
"Error creating user" => "Грешка при прављењу корисника",
"A valid password must be provided" => "Морате унети исправну лозинку",
"__language_name__" => "__language_name__",
+"Encryption" => "Шифровање",
"None" => "Ништа",
"Login" => "Пријави ме",
"Security Warning" => "Сигурносно упозорење",
@@ -58,11 +52,8 @@ $TRANSLATIONS = array(
"Less" => "Мање",
"Version" => "Верзија",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Развијају <a href=\"http://ownCloud.org/contact\" target=\"_blank\">Оунклауд (ownCloud) заједница</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">изворни код</a> је издат под <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Аферо Јавном Лиценцом (Affero General Public License)\">АГПЛ лиценцом</abbr></a>.",
-"Add your App" => "Додајте ваш програм",
-"More Apps" => "Више програма",
-"Select an App" => "Изаберите програм",
-"See application page at apps.owncloud.com" => "Погледајте страницу са програмима на apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-лиценцирао <span class=\"author\"></span>",
+"by" => "од",
+"User Documentation" => "Корисничка документација",
"Administrator Documentation" => "Администраторска документација",
"Online Documentation" => "Мрежна документација",
"Forum" => "Форум",
diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php
index 4246180575a..7116283bed3 100644
--- a/settings/l10n/sr@latin.php
+++ b/settings/l10n/sr@latin.php
@@ -1,10 +1,9 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Email poslat",
"Authentication error" => "Greška pri autentifikaciji",
"Language changed" => "Jezik je izmenjen",
"Invalid request" => "Neispravan zahtev",
-"Error" => "Greška",
+"Email sent" => "Email poslat",
"Very weak password" => "Veoma slaba lozinka",
"Weak password" => "Slaba lozinka",
"So-so password" => "Osrednja lozinka",
@@ -13,7 +12,7 @@ $TRANSLATIONS = array(
"Delete" => "Obriši",
"Groups" => "Grupe",
"Security Warning" => "Bezbednosno upozorenje",
-"Select an App" => "Izaberite program",
+"by" => "od",
"Password" => "Lozinka",
"Unable to change your password" => "Ne mogu da izmenim vašu lozinku",
"Current password" => "Trenutna lozinka",
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 5a8271d7933..60ca3488e04 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "Ogiltigt värde gavs för %s",
-"Saved" => "Sparad",
-"test email settings" => "testa e-post inställningar",
-"If you received this email, the settings seem to be correct." => "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "Ett problem har uppstått under tiden e-post sändes. Vänligen se över dina inställningar.",
-"Email sent" => "E-post skickat",
-"You need to set your user email before being able to send test emails." => "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.",
-"Send mode" => "Sändningsläge",
-"Encryption" => "Kryptering",
-"Authentication method" => "Autentiseringsmetod",
-"Unable to load list from App Store" => "Kan inte ladda listan från App Store",
+"Enabled" => "Aktiverad",
+"Not enabled" => "Inte aktiverad",
+"Recommended" => "Rekomenderad",
"Authentication error" => "Fel vid autentisering",
"Your full name has been changed." => "Hela ditt namn har ändrats",
"Unable to change full name" => "Kunde inte ändra hela namnet",
@@ -40,23 +32,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Gränssnittet stödjer inte byte av lösenord, men användarnas krypteringsnyckel blev uppdaterad.",
"Unable to change password" => "Kunde inte ändra lösenord",
+"Saved" => "Sparad",
+"test email settings" => "testa e-post inställningar",
+"If you received this email, the settings seem to be correct." => "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.",
+"Email sent" => "E-post skickat",
+"You need to set your user email before being able to send test emails." => "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "Är du verkligen säker på att du vill lägga till \"{domain}\" som en trusted domian?",
"Add trusted domain" => "Lägg till trusted domain",
"Sending..." => "Skickar...",
"All" => "Alla",
-"User Documentation" => "Användardokumentation",
-"Admin Documentation" => "Administratörsdokumentation",
-"Update to {appversion}" => "Uppdatera till {appversion}",
-"Uninstall App" => "Avinstallera Applikation",
-"Disable" => "Deaktivera",
-"Enable" => "Aktivera",
"Please wait...." => "Var god vänta...",
"Error while disabling app" => "Fel vid inaktivering av app",
+"Disable" => "Deaktivera",
+"Enable" => "Aktivera",
"Error while enabling app" => "Fel vid aktivering av app",
"Updating...." => "Uppdaterar...",
"Error while updating app" => "Fel uppstod vid uppdatering av appen",
-"Error" => "Fel",
-"Update" => "Uppdatera",
"Updated" => "Uppdaterad",
"Uninstalling ...." => "Avinstallerar ....",
"Error while uninstalling app" => "Ett fel inträffade när applikatonen avinstallerades",
@@ -78,7 +69,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Ett giltigt gruppnamn måste anges",
"deleted {groupName}" => "raderade {groupName} ",
"undo" => "ångra",
-"Group Admin" => "Gruppadministratör",
"never" => "aldrig",
"deleted {userName}" => "raderade {userName}",
"add group" => "lägg till grupp",
@@ -87,6 +77,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Ett giltigt lösenord måste anges",
"Warning: Home directory for user \"{user}\" already exists" => "Varning: Hem katalogen för varje användare \"{användare}\" finns redan",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL rotcertifikat",
+"Encryption" => "Kryptering",
"Everything (fatal issues, errors, warnings, info, debug)" => "Allting (allvarliga fel, fel, varningar, info, debug)",
"Info, warnings, errors and fatal issues" => "Info, varningar och allvarliga fel",
"Warnings, errors and fatal issues" => "Varningar, fel och allvarliga fel",
@@ -139,8 +131,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Anslut till din %s via HTTPS för att aktivera/deaktivera SSL",
"Email Server" => "E-postserver",
"This is used for sending out notifications." => "Detta används för att skicka ut notifieringar.",
+"Send mode" => "Sändningsläge",
"From address" => "Från adress",
"mail" => "mail",
+"Authentication method" => "Autentiseringsmetod",
"Authentication required" => "Autentisering krävs",
"Server address" => "Serveradress",
"Port" => "Port",
@@ -155,20 +149,21 @@ $TRANSLATIONS = array(
"Less" => "Mindre",
"Version" => "Version",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Utvecklad av <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud Community</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">källkoden</a> är licenserad under <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Lägg till din applikation",
-"More Apps" => "Fler Appar",
-"Select an App" => "Välj en App",
+"More apps" => "Fler appar",
+"by" => "av",
"Documentation:" => "Dokumentation:",
-"See application page at apps.owncloud.com" => "Se programsida på apps.owncloud.com",
-"See application website" => "Se applikationens webbplats",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licensierad av <span class=\"author\"></span>",
+"User Documentation" => "Användardokumentation",
+"Admin Documentation" => "Administratörsdokumentation",
+"Update to %s" => "Uppdatera till %s",
"Enable only for specific groups" => "Aktivera endast för specifika grupper",
+"Uninstall App" => "Avinstallera Applikation",
"Administrator Documentation" => "Administratörsdokumentation",
"Online Documentation" => "Onlinedokumentation",
"Forum" => "Forum",
"Bugtracker" => "Bugtracker",
"Commercial Support" => "Kommersiell support",
"Get the apps to sync your files" => "Skaffa apparna för att synkronisera dina filer",
+"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" => "Om du vill stödja projektet\n<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">hjälp till med utvecklingen</a>\n\t\teller\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">sprid budskapet vidare</a>!",
"Show First Run Wizard again" => "Visa Första uppstarts-guiden igen",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Du har använt <strong>%s</strong> av tillgängliga <strong>%s</strong>",
"Password" => "Lösenord",
@@ -191,7 +186,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Välj som profilbild",
"Language" => "Språk",
"Help translate" => "Hjälp att översätta",
-"SSL root certificates" => "SSL rotcertifikat",
"Import Root Certificate" => "Importera rotcertifikat",
"The encryption app is no longer enabled, please decrypt all your files" => "Krypteringsapplikationen är inte längre aktiverad, vänligen dekryptera alla dina filer",
"Log-in password" => "Inloggningslösenord",
diff --git a/settings/l10n/ta_LK.php b/settings/l10n/ta_LK.php
index ba97e43684c..7d7df14e9d3 100644
--- a/settings/l10n/ta_LK.php
+++ b/settings/l10n/ta_LK.php
@@ -1,7 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Encryption" => "மறைக்குறியீடு",
-"Unable to load list from App Store" => "செயலி சேமிப்பிலிருந்து பட்டியலை ஏற்றமுடியாதுள்ளது",
"Authentication error" => "அத்தாட்சிப்படுத்தலில் வழு",
"Group already exists" => "குழு ஏற்கனவே உள்ளது",
"Unable to add group" => "குழுவை சேர்க்க முடியாது",
@@ -16,14 +14,13 @@ $TRANSLATIONS = array(
"All" => "எல்லாம்",
"Disable" => "இயலுமைப்ப",
"Enable" => "இயலுமைப்படுத்துக",
-"Error" => "வழு",
-"Update" => "இற்றைப்படுத்தல்",
"Delete" => "நீக்குக",
"Groups" => "குழுக்கள்",
"undo" => "முன் செயல் நீக்கம் ",
-"Group Admin" => "குழு நிர்வாகி",
"never" => "ஒருபோதும்",
"__language_name__" => "_மொழி_பெயர்_",
+"SSL root certificates" => "SSL வேர் சான்றிதழ்கள்",
+"Encryption" => "மறைக்குறியீடு",
"None" => "ஒன்றுமில்லை",
"Login" => "புகுபதிகை",
"Security Warning" => "பாதுகாப்பு எச்சரிக்கை",
@@ -33,11 +30,7 @@ $TRANSLATIONS = array(
"More" => "மேலதிக",
"Less" => "குறைவான",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "உங்களுடைய செயலியை சேர்க்க",
-"More Apps" => "மேலதிக செயலிகள்",
-"Select an App" => "செயலி ஒன்றை தெரிவுசெய்க",
-"See application page at apps.owncloud.com" => "apps.owncloud.com இல் செயலி பக்கத்தை பார்க்க",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"அனுமதிப்பத்திரம்\"></span>-அனுமதி பெற்ற <span class=\"ஆசிரியர்\"></span>",
+"by" => "மூலம்",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "நீங்கள் <strong>%s</strong> இலுள்ள <strong>%s</strong>பயன்படுத்தியுள்ளீர்கள்",
"Password" => "கடவுச்சொல்",
"Your password was changed" => "உங்களுடைய கடவுச்சொல் மாற்றப்பட்டுள்ளது",
@@ -50,7 +43,6 @@ $TRANSLATIONS = array(
"Cancel" => "இரத்து செய்க",
"Language" => "மொழி",
"Help translate" => "மொழிபெயர்க்க உதவி",
-"SSL root certificates" => "SSL வேர் சான்றிதழ்கள்",
"Import Root Certificate" => "வேர் சான்றிதழை இறக்குமதி செய்க",
"Login Name" => "புகுபதிகை",
"Create" => "உருவாக்குக",
diff --git a/settings/l10n/te.php b/settings/l10n/te.php
index 5161863f13f..d5f2c6c8d16 100644
--- a/settings/l10n/te.php
+++ b/settings/l10n/te.php
@@ -1,6 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Error" => "పొరపాటు",
"Delete" => "తొలగించు",
"Server address" => "సేవకి చిరునామా",
"More" => "మరిన్ని",
diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php
index 4e1f48f26a7..5abacd4f4b1 100644
--- a/settings/l10n/th_TH.php
+++ b/settings/l10n/th_TH.php
@@ -1,8 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "ส่งอีเมล์แล้ว",
-"Encryption" => "การเข้ารหัส",
-"Unable to load list from App Store" => "ไม่สามารถโหลดรายการจาก App Store ได้",
"Authentication error" => "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน",
"Group already exists" => "มีกลุ่มดังกล่าวอยู่ในระบบอยู่แล้ว",
"Unable to add group" => "ไม่สามารถเพิ่มกลุ่มได้",
@@ -16,23 +13,21 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "ไม่สามารถเพิ่มผู้ใช้งานเข้าไปที่กลุ่ม %s ได้",
"Unable to remove user from group %s" => "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้",
"Couldn't update app." => "ไม่สามารถอัพเดทแอปฯ",
+"Email sent" => "ส่งอีเมล์แล้ว",
"All" => "ทั้งหมด",
-"User Documentation" => "เอกสารคู่มือการใช้งานสำหรับผู้ใช้งาน",
-"Update to {appversion}" => "อัพเดทไปเป็นรุ่น {appversion}",
+"Please wait...." => "กรุณารอสักครู่...",
"Disable" => "ปิดใช้งาน",
"Enable" => "เปิดใช้งาน",
-"Please wait...." => "กรุณารอสักครู่...",
"Updating...." => "กำลังอัพเดทข้อมูล...",
"Error while updating app" => "เกิดข้อผิดพลาดในระหว่างการอัพเดทแอปฯ",
-"Error" => "ข้อผิดพลาด",
-"Update" => "อัพเดท",
"Updated" => "อัพเดทแล้ว",
"Delete" => "ลบ",
"Groups" => "กลุ่ม",
"undo" => "เลิกทำ",
-"Group Admin" => "ผู้ดูแลกลุ่ม",
"never" => "ไม่ต้องเลย",
"__language_name__" => "ภาษาไทย",
+"SSL root certificates" => "ใบรับรองความปลอดภัยด้วยระบบ SSL จาก Root",
+"Encryption" => "การเข้ารหัส",
"None" => "ไม่มี",
"Login" => "เข้าสู่ระบบ",
"Security Warning" => "คำเตือนเกี่ยวกับความปลอดภัย",
@@ -50,11 +45,8 @@ $TRANSLATIONS = array(
"Less" => "น้อย",
"Version" => "รุ่น",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "พัฒนาโดย the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ชุมชนผู้ใช้งาน ownCloud</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">ซอร์สโค้ด</a>อยู่ภายใต้สัญญาอนุญาตของ <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "เพิ่มแอปของคุณ",
-"More Apps" => "แอปฯอื่นเพิ่มเติม",
-"Select an App" => "เลือก App",
-"See application page at apps.owncloud.com" => "ดูหน้าแอพพลิเคชั่นที่ apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-ลิขสิทธิ์การใช้งานโดย <span class=\"author\"></span>",
+"by" => "โดย",
+"User Documentation" => "เอกสารคู่มือการใช้งานสำหรับผู้ใช้งาน",
"Administrator Documentation" => "เอกสารคู่มือการใช้งานสำหรับผู้ดูแลระบบ",
"Online Documentation" => "เอกสารคู่มือการใช้งานออนไลน์",
"Forum" => "กระดานสนทนา",
@@ -74,7 +66,6 @@ $TRANSLATIONS = array(
"Cancel" => "ยกเลิก",
"Language" => "ภาษา",
"Help translate" => "ช่วยกันแปล",
-"SSL root certificates" => "ใบรับรองความปลอดภัยด้วยระบบ SSL จาก Root",
"Import Root Certificate" => "นำเข้าข้อมูลใบรับรองความปลอดภัยจาก Root",
"Login Name" => "ชื่อที่ใช้สำหรับเข้าสู่ระบบ",
"Create" => "สร้าง",
diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php
index ce7f7cd5b19..23a0f1dcdd4 100644
--- a/settings/l10n/tr.php
+++ b/settings/l10n/tr.php
@@ -1,16 +1,8 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "%s için geçersiz değer sağlandı",
-"Saved" => "Kaydedildi",
-"test email settings" => "e-posta ayarlarını sına",
-"If you received this email, the settings seem to be correct." => "Eğer bu e-postayı aldıysanız, ayarlar doğru gibi görünüyor.",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "E-posta gönderilirken bir hata oluştu. Lütfen ayarlarınıza tekrar bakın.",
-"Email sent" => "E-posta gönderildi",
-"You need to set your user email before being able to send test emails." => "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamanız gerekiyor.",
-"Send mode" => "Gönderme kipi",
-"Encryption" => "Şifreleme",
-"Authentication method" => "Kimlik doğrulama yöntemi",
-"Unable to load list from App Store" => "Uygulama Mağazası'ndan liste yüklenemiyor",
+"Enabled" => "Etkin",
+"Not enabled" => "Etkin değil",
+"Recommended" => "Önerilen",
"Authentication error" => "Kimlik doğrulama hatası",
"Your full name has been changed." => "Tam adınız değiştirildi.",
"Unable to change full name" => "Tam adınız değiştirilirken hata",
@@ -40,23 +32,23 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "Hatalı yönetici kurtarma parolası. Lütfen parolayı denetleyip yeniden deneyin.",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Arka uç parola değişimini desteklemiyor ancak kullanıcı şifreleme anahtarı başarıyla güncellendi.",
"Unable to change password" => "Parola değiştirilemiyor",
+"Saved" => "Kaydedildi",
+"test email settings" => "e-posta ayarlarını sına",
+"If you received this email, the settings seem to be correct." => "Eğer bu e-postayı aldıysanız, ayarlar doğru gibi görünüyor.",
+"A problem occurred while sending the email. Please revise your settings." => "E-posta gönderilirken bir sorun oluştu. Lütfen ayarlarınızı gözden geçirin.",
+"Email sent" => "E-posta gönderildi",
+"You need to set your user email before being able to send test emails." => "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamanız gerekiyor.",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?",
"Add trusted domain" => "Güvenilir alan adı ekle",
"Sending..." => "Gönderiliyor...",
"All" => "Tümü",
-"User Documentation" => "Kullanıcı Belgelendirmesi",
-"Admin Documentation" => "Yönetici Belgelendirmesi",
-"Update to {appversion}" => "{appversion} sürümüne güncelle",
-"Uninstall App" => "Uygulamayı Kaldır",
-"Disable" => "Devre Dışı Bırak",
-"Enable" => "Etkinleştir",
"Please wait...." => "Lütfen bekleyin....",
"Error while disabling app" => "Uygulama devre dışı bırakılırken hata",
+"Disable" => "Devre Dışı Bırak",
+"Enable" => "Etkinleştir",
"Error while enabling app" => "Uygulama etkinleştirilirken hata",
"Updating...." => "Güncelleniyor....",
"Error while updating app" => "Uygulama güncellenirken hata",
-"Error" => "Hata",
-"Update" => "Güncelle",
"Updated" => "Güncellendi",
"Uninstalling ...." => "Kaldırılıyor ....",
"Error while uninstalling app" => "Uygulama kaldırılırken hata",
@@ -78,7 +70,7 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "Geçerli bir grup adı mutlaka sağlanmalı",
"deleted {groupName}" => "{groupName} silindi",
"undo" => "geri al",
-"Group Admin" => "Grup Yöneticisi",
+"no group" => "grup yok",
"never" => "hiçbir zaman",
"deleted {userName}" => "{userName} silindi",
"add group" => "grup ekle",
@@ -87,6 +79,9 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "Geçerli bir parola mutlaka sağlanmalı",
"Warning: Home directory for user \"{user}\" already exists" => "Uyarı: \"{user}\" kullanıcısı için zaten bir Ev dizini mevcut",
"__language_name__" => "Türkçe",
+"Personal Info" => "Kişisel Bilgi",
+"SSL root certificates" => "SSL kök sertifikaları",
+"Encryption" => "Şifreleme",
"Everything (fatal issues, errors, warnings, info, debug)" => "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)",
"Info, warnings, errors and fatal issues" => "Bilgi, uyarılar, hatalar ve ciddi sorunlar",
"Warnings, errors and fatal issues" => "Uyarılar, hatalar ve ciddi sorunlar",
@@ -148,14 +143,17 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "SSL zorlamasını etkinleştirmek ya da devre dışı bırakmak için lütfen %s'a HTTPS ile bağlanın.",
"Email Server" => "E-Posta Sunucusu",
"This is used for sending out notifications." => "Bu, bildirimler gönderilirken kullanılır.",
+"Send mode" => "Gönderme kipi",
"From address" => "Kimden adresi",
"mail" => "posta",
+"Authentication method" => "Kimlik doğrulama yöntemi",
"Authentication required" => "Kimlik doğrulama gerekli",
"Server address" => "Sunucu adresi",
"Port" => "Port",
"Credentials" => "Kimlik Bilgileri",
"SMTP Username" => "SMTP Kullanıcı Adı",
"SMTP Password" => "SMTP Parolası",
+"Store credentials" => "Kimlik bilgilerini depola",
"Test email settings" => "E-posta ayarlarını sına",
"Send email" => "E-posta gönder",
"Log" => "Günlük",
@@ -164,14 +162,16 @@ $TRANSLATIONS = array(
"Less" => "Daha az",
"Version" => "Sürüm",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud topluluğu</a> tarafından geliştirilmiş olup, <a href=\"https://github.com/owncloud\" target=\"_blank\">kaynak kodu</a>, <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> altında lisanslanmıştır.",
-"Add your App" => "Uygulamanızı Ekleyin",
-"More Apps" => "Daha Fazla Uygulama",
-"Select an App" => "Bir Uygulama Seçin",
+"More apps" => "Daha fazla Uygulama",
+"Add your app" => "Uygulamanızı ekleyin",
+"by" => "oluşturan",
+"licensed" => "lisanslı",
"Documentation:" => "Belgelendirme:",
-"See application page at apps.owncloud.com" => "Uygulamanın sayfasına apps.owncloud.com adresinden bakın ",
-"See application website" => "Uygulama web sitesine bakın",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span> ile lisanslayan: <span class=\"author\"></span>",
+"User Documentation" => "Kullanıcı Belgelendirmesi",
+"Admin Documentation" => "Yönetici Belgelendirmesi",
+"Update to %s" => "%s sürümüne güncelle",
"Enable only for specific groups" => "Sadece belirli gruplar için etkinleştir",
+"Uninstall App" => "Uygulamayı Kaldır",
"Administrator Documentation" => "Yönetici Belgelendirmesi",
"Online Documentation" => "Çevrimiçi Belgelendirme",
"Forum" => "Forum",
@@ -201,7 +201,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Profil resmi olarak seç",
"Language" => "Dil",
"Help translate" => "Çevirilere yardım edin",
-"SSL root certificates" => "SSL kök sertifikaları",
"Common Name" => "Ortak Ad",
"Valid until" => "Geçerlilik",
"Issued By" => "Veren",
@@ -229,6 +228,7 @@ $TRANSLATIONS = array(
"Unlimited" => "Sınırsız",
"Other" => "Diğer",
"Username" => "Kullanıcı Adı",
+"Group Admin for" => "Grup Yöneticisi",
"Quota" => "Kota",
"Storage Location" => "Depolama Konumu",
"Last Login" => "Son Giriş",
diff --git a/settings/l10n/ug.php b/settings/l10n/ug.php
index f1d2abbe148..0bd29895d96 100644
--- a/settings/l10n/ug.php
+++ b/settings/l10n/ug.php
@@ -1,7 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Encryption" => "شىفىرلاش",
-"Unable to load list from App Store" => "ئەپ بازىرىدىن تىزىمنى يۈكلىيەلمىدى",
"Authentication error" => "سالاھىيەت دەلىللەش خاتالىقى",
"Group already exists" => "گۇرۇپپا مەۋجۇت",
"Unable to add group" => "گۇرۇپپا قوشقىلى بولمايدۇ",
@@ -16,26 +14,22 @@ $TRANSLATIONS = array(
"Unable to remove user from group %s" => "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ",
"Couldn't update app." => "ئەپنى يېڭىلىيالمايدۇ.",
"All" => "ھەممىسى",
-"User Documentation" => "ئىشلەتكۈچى قوللانمىسى",
-"Update to {appversion}" => "{appversion} غا يېڭىلايدۇ",
+"Please wait...." => "سەل كۈتۈڭ…",
"Disable" => "چەكلە",
"Enable" => "قوزغات",
-"Please wait...." => "سەل كۈتۈڭ…",
"Updating...." => "يېڭىلاۋاتىدۇ…",
"Error while updating app" => "ئەپنى يېڭىلاۋاتقاندا خاتالىق كۆرۈلدى",
-"Error" => "خاتالىق",
-"Update" => "يېڭىلا",
"Updated" => "يېڭىلاندى",
"Delete" => "ئۆچۈر",
"Groups" => "گۇرۇپپا",
"undo" => "يېنىۋال",
-"Group Admin" => "گۇرۇپپا باشقۇرغۇچى",
"never" => "ھەرگىز",
"add group" => "گۇرۇپپا قوش",
"A valid username must be provided" => "چوقۇم ئىناۋەتلىك ئىشلەتكۈچى ئىسمىدىن بىرنى تەمىنلەش كېرەك",
"Error creating user" => "ئىشلەتكۈچى قۇرۇۋاتقاندا خاتالىق كۆرۈلدى",
"A valid password must be provided" => "چوقۇم ئىناۋەتلىك ئىم تەمىنلەش كېرەك",
"__language_name__" => "ئۇيغۇرچە",
+"Encryption" => "شىفىرلاش",
"None" => "يوق",
"Login" => "تىزىمغا كىرىڭ",
"Security Warning" => "بىخەتەرلىك ئاگاھلاندۇرۇش",
@@ -50,9 +44,8 @@ $TRANSLATIONS = array(
"More" => "تېخىمۇ كۆپ",
"Less" => "ئاز",
"Version" => "نەشرى",
-"Add your App" => "ئەپىڭىزنى قوشۇڭ",
-"More Apps" => "تېخىمۇ كۆپ ئەپلەر",
-"Select an App" => "بىر ئەپ تاللاڭ",
+"by" => "سەنئەتكار",
+"User Documentation" => "ئىشلەتكۈچى قوللانمىسى",
"Administrator Documentation" => "باشقۇرغۇچى قوللانمىسى",
"Online Documentation" => "توردىكى قوللانما",
"Forum" => "مۇنبەر",
diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php
index 24b1a734745..39cb54a4f1a 100644
--- a/settings/l10n/uk.php
+++ b/settings/l10n/uk.php
@@ -1,81 +1,184 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Ел. пошта надіслана",
-"Encryption" => "Шифрування",
-"Unable to load list from App Store" => "Не вдалося завантажити список з App Store",
+"Enabled" => "Увімкнено",
+"Not enabled" => "Вимкнено",
+"Recommended" => "Рекомендуємо",
"Authentication error" => "Помилка автентифікації",
+"Your full name has been changed." => "Ваше ім'я було змінене",
+"Unable to change full name" => "Неможливо змінити ім'я",
"Group already exists" => "Група вже існує",
"Unable to add group" => "Не вдалося додати групу",
+"Files decrypted successfully" => "Файли розшифровані успішно",
+"Couldn't decrypt your files, please check your owncloud.log or ask your administrator" => "Помилка розшифровки файлів, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
+"Couldn't decrypt your files, check your password and try again" => "Помилка розшифровки файлів, перевірте пароль та спробуйте ще раз",
+"Encryption keys deleted permanently" => "Ключі шифрування видалені назавжди",
+"Couldn't permanently delete your encryption keys, please check your owncloud.log or ask your administrator" => "Неможливо видалити назавжди ключі шифрування, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
+"Couldn't remove app." => "Неможливо видалити додаток.",
"Email saved" => "Адресу збережено",
"Invalid email" => "Невірна адреса",
"Unable to delete group" => "Не вдалося видалити групу",
"Unable to delete user" => "Не вдалося видалити користувача",
+"Backups restored successfully" => "Резервна копія успішно відновлена",
+"Couldn't restore your encryption keys, please check your owncloud.log or ask your administrator" => "Неможливо відновити ключі шифрування, зверніться до вашого адміністратора. Додаткова інформація в owncloud.log",
"Language changed" => "Мова змінена",
"Invalid request" => "Некоректний запит",
"Admins can't remove themself from the admin group" => "Адміністратор не може видалити себе з групи адмінів",
"Unable to add user to group %s" => "Не вдалося додати користувача у групу %s",
"Unable to remove user from group %s" => "Не вдалося видалити користувача із групи %s",
"Couldn't update app." => "Не вдалося оновити програму. ",
+"Wrong password" => "Невірний пароль",
+"No user supplied" => "Користувач не знайден",
+"Please provide an admin recovery password, otherwise all user data will be lost" => "Будь ласка введіть пароль адміністратора для відновлення, інакше всі дані будуть втрачені",
+"Wrong admin recovery password. Please check the password and try again." => "Неправильний пароль адміністратора для відновлення. Перевірте пароль та спробуйте ще раз.",
+"Back-end doesn't support password change, but the users encryption key was successfully updated." => "Система не підтримує зміни пароля, але ключ шифрування користувача успішно оновлено.",
+"Unable to change password" => "Неможливо змінити пароль",
+"Saved" => "Збереженно",
+"test email settings" => "перевірити налаштування електронної пошти",
+"If you received this email, the settings seem to be correct." => "Якщо ви отримали цього листа, налаштування вірні.",
+"A problem occurred while sending the email. Please revise your settings." => "Під час надсилання листа виникли проблеми. Будь ласка перевірте налаштування.",
+"Email sent" => "Ел. пошта надіслана",
+"You need to set your user email before being able to send test emails." => "Перед надсиланням тестових повідомлень ви повинні вказати свою електронну адресу.",
+"Are you really sure you want add \"{domain}\" as trusted domain?" => "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?",
+"Add trusted domain" => "Додати довірений домен",
+"Sending..." => "Надсилання...",
"All" => "Всі",
-"User Documentation" => "Документація Користувача",
-"Update to {appversion}" => "Оновити до {appversion}",
+"Please wait...." => "Зачекайте, будь ласка...",
+"Error while disabling app" => "Помилка відключення додатка",
"Disable" => "Вимкнути",
"Enable" => "Включити",
-"Please wait...." => "Зачекайте, будь ласка...",
+"Error while enabling app" => "Помилка підключення додатка",
"Updating...." => "Оновлюється...",
"Error while updating app" => "Помилка при оновленні програми",
-"Error" => "Помилка",
-"Update" => "Оновити",
"Updated" => "Оновлено",
+"Uninstalling ...." => "Видалення...",
+"Error while uninstalling app" => "Помилка видалення додатка",
+"Uninstall" => "Видалити",
+"Select a profile picture" => "Обрати зображення облікового запису",
"Very weak password" => "Дуже слабкий пароль",
"Weak password" => "Слабкий пароль",
+"So-so password" => "Такий собі пароль",
"Good password" => "Добрий пароль",
"Strong password" => "Надійний пароль",
+"Valid until {date}" => "Дійсно до {date}",
"Delete" => "Видалити",
+"Decrypting files... Please wait, this can take some time." => "Розшифровка файлів... Будь ласка, зачекайте, це може зайняти деякий час.",
+"Delete encryption keys permanently." => "Видалити ключі шифрування назавжди.",
+"Restore encryption keys." => "Відновити ключі шифрування.",
"Groups" => "Групи",
+"Unable to delete {objName}" => "Не вдалося видалити {objName}",
+"Error creating group" => "Помилка створення групи",
+"A valid group name must be provided" => "Потрібно задати вірне ім'я групи",
+"deleted {groupName}" => "видалено {groupName}",
"undo" => "відмінити",
-"Group Admin" => "Адміністратор групи",
+"no group" => "без групи",
"never" => "ніколи",
+"deleted {userName}" => "видалено {userName}",
"add group" => "додати групу",
"A valid username must be provided" => "Потрібно задати вірне ім'я користувача",
"Error creating user" => "Помилка при створенні користувача",
"A valid password must be provided" => "Потрібно задати вірний пароль",
+"Warning: Home directory for user \"{user}\" already exists" => "Попередження: домашня тека користувача \"{user}\" вже існує",
"__language_name__" => "__language_name__",
+"Personal Info" => "Особиста інформація",
+"SSL root certificates" => "SSL корневі сертифікати",
+"Encryption" => "Шифрування",
+"Everything (fatal issues, errors, warnings, info, debug)" => "Усі (критичні проблеми, помилки, попередження, інформаційні, налагодження)",
+"Info, warnings, errors and fatal issues" => "Інформаційні, попередження, помилки та критичні проблеми",
+"Warnings, errors and fatal issues" => "Попередження, помилки та критичні проблеми",
+"Errors and fatal issues" => "Помилки та критичні проблеми",
+"Fatal issues only" => "Тільки критичні проблеми",
"None" => "Жоден",
"Login" => "Логін",
+"Plain" => "Звичайний",
+"NT LAN Manager" => "Менеджер NT LAN",
+"SSL" => "SSL",
+"TLS" => "TLS",
"Security Warning" => "Попередження про небезпеку",
+"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." => "Ви звертаєтесь до %s за допомогою HTTP. Ми наполегливо рекомендуємо вам налаштувати сервер на використання HTTPS.",
+"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 webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Ваш каталог з даними та Ваші файли можливо доступні з Інтернету. Файл .htaccess, наданий з ownCloud, не працює. Ми наполегливо рекомендуємо Вам налаштувати свій веб-сервер таким чином, щоб каталог data більше не був доступний, або перемістити каталог data за межі кореневого каталогу документів веб-сервера.",
"Setup Warning" => "Попередження при Налаштуванні",
+"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." => "Схоже, що PHP налаштовано на вичищення блоків вбудованої документації. Це зробить кілька основних додатків недоступними.",
+"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." => "Це, ймовірно, обумовлено використанням кеша/прискорювача такого як Zend OPcache або eAccelerator.",
+"Database Performance Info" => "Інформація продуктивності баз даних",
+"SQLite is used as database. For larger installations we recommend to change this. To migrate to another database use the command line tool: 'occ db:convert-type'" => "В якості бази даних використовується SQLite. Для більш навантажених серверів, ми рекомендуємо користуватися іншими типами баз даних. Для зміни типу бази даних використовуйте інструмент командного рядка: 'occ db:convert-type'",
"Module 'fileinfo' missing" => "Модуль 'fileinfo' відсутній",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.",
+"Your PHP version is outdated" => "Ваш версія PHP застаріла",
+"Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." => "Ваш версія PHP застаріла. Ми наполегливо рекомендуємо оновитися до версії 5.3.8 або новішої, оскільки старі версії працюють не правильно. ",
+"PHP charset is not set to UTF-8" => "Кодування PHP не співпадає з UTF-8",
+"PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." => "Кодування PHP не співпадає з UTF-8. Це може викликати проблеми іменами файлів, які містять нелатинські символи. Ми наполегливо рекомендуємо змінити значення перемінної default_charset у файлі php.ini на UTF-8.",
"Locale not working" => "Локалізація не працює",
+"System locale can not be set to a one which supports UTF-8." => "Неможливо встановити системну локаль, яка б підтримувала UTF-8.",
+"This means that there might be problems with certain characters in file names." => "Це означає, що можуть виникати проблеми з деякими символами в іменах файлів.",
+"We strongly suggest to install the required packages on your system to support one of the following locales: %s." => "Ми наполегливо рекомендуємо встановити необхідні пакети в систему, для підтримки наступних локалей: %s.",
+"URL generation in notification emails" => "Генерування URL для повідомлень в електроних листах",
+"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 \"overwritewebroot\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" => "Якщо ваша копія ownCloud встановлена не в корені домену та використовує систему планування CRON, можливі проблеми з генерацією правильних URL. Щоб уникнути цього, встановіть опцію overwritewebroot файла config.php відповідно до теки розташування установки (Ймовірніше за все, це \"%s\")",
+"Connectivity checks" => "Перевірка з'єднання",
+"No problems found" => "Проблем не виявленно",
"Please double check the <a href='%s'>installation guides</a>." => "Будь ласка, перевірте <a href='%s'>інструкції по встановленню</a>.",
"Cron" => "Cron",
+"Last cron was executed at %s." => "Останню cron-задачу було запущено: %s.",
+"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Останню cron-задачу було запущено: %s. Минуло вже більше години, здається щось не так.",
+"Cron was not executed yet!" => "Cron-задачі ще не запускалися!",
"Execute one task with each page loaded" => "Виконати одне завдання для кожної завантаженої сторінки ",
+"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "cron.php зареєстрований в службі webcron та буде викликатися кожні 15 хвилин через HTTP.",
+"Use system's cron service to call the cron.php file every 15 minutes." => "Використовувати системний cron для виклику cron.php кожні 15 хвилин.",
"Sharing" => "Спільний доступ",
"Allow apps to use the Share API" => "Дозволити програмам використовувати API спільного доступу",
+"Allow users to share via link" => "Дозволити користувачам ділитися через посилання",
+"Enforce password protection" => "Захист паролем обов'язковий",
+"Allow public uploads" => "Дозволити публічне завантаження",
+"Set default expiration date" => "Встановити термін дії за замовчуванням",
+"Expire after " => "Скінчиться через",
+"days" => "днів",
+"Enforce expiration date" => "Термін дії обов'язково",
"Allow resharing" => "Дозволити перевідкривати спільний доступ",
+"Restrict users to only share with users in their groups" => "Дозволити користувачам відкривати спільний доступ лише для користувачів з їхньої групи",
+"Allow users to send mail notification for shared files" => "Дозволити користувачам сповіщати листами про спільний доступ до файлів",
+"Exclude groups from sharing" => "Виключити групи зі спільного доступу",
+"These groups will still be able to receive shares, but not to initiate them." => "Ці групи зможуть отримувати спільні файли, але не зможуть відправляти їх.",
"Security" => "Безпека",
"Enforce HTTPS" => "Примусове застосування HTTPS",
+"Forces the clients to connect to %s via an encrypted connection." => "Зобов'язати клієнтів під'єднуватись до %s через шифроване з'єднання.",
+"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Будь ласка, під'єднайтесь до цього %s за допомогою HTTPS, щоб увімкнути або вимкнути використання SSL.",
+"Email Server" => "Сервер електронної пошти",
+"This is used for sending out notifications." => "Використовується для відсилання повідомлень.",
+"Send mode" => "Надіслати повідомлення",
+"From address" => "Адреса відправника",
+"mail" => "пошта",
+"Authentication method" => "Метод перевірки автентифікації",
+"Authentication required" => "Потрібна аутентифікація",
"Server address" => "Адреса сервера",
"Port" => "Порт",
"Credentials" => "Облікові дані",
+"SMTP Username" => "Ім'я користувача SMTP",
+"SMTP Password" => "Пароль SMTP",
+"Store credentials" => "Зберігання облікових даних",
+"Test email settings" => "Перевірити налаштування електронної пошти",
+"Send email" => "Надіслати листа",
"Log" => "Протокол",
"Log level" => "Рівень протоколювання",
"More" => "Більше",
"Less" => "Менше",
"Version" => "Версія",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Розроблено <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud громадою</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">вихідний код</a> має ліцензію <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Додати свою програму",
-"More Apps" => "Більше програм",
-"Select an App" => "Вибрати додаток",
-"See application page at apps.owncloud.com" => "Перегляньте сторінку програм на apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>",
+"More apps" => "Більше додатків",
+"Add your app" => "Додати свій додаток",
+"by" => "по",
+"licensed" => "Ліцензовано",
+"Documentation:" => "Документація:",
+"User Documentation" => "Документація Користувача",
+"Admin Documentation" => "Документація Адміністратора",
+"Update to %s" => "Оновити до %s",
+"Enable only for specific groups" => "Включити тільки для конкретних груп",
+"Uninstall App" => "Видалити додаток",
"Administrator Documentation" => "Документація Адміністратора",
"Online Documentation" => "Он-Лайн Документація",
"Forum" => "Форум",
"Bugtracker" => "БагТрекер",
"Commercial Support" => "Комерційна підтримка",
"Get the apps to sync your files" => "Отримати додатки для синхронізації ваших файлів",
+"If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\">spread the word</a>!" => "Якщо ви бажаєте підтримати прект\n⇥⇥<a href=\"https://owncloud.org/contribute\"\n⇥⇥target=\"_blank\">приєднуйтесь до розробки</a>\n⇥⇥або\n⇥⇥<a href=\"https://owncloud.org/promote\"\n⇥⇥target=\"_blank\">розкажіть про нас</a>!",
"Show First Run Wizard again" => "Показувати Майстер Налаштувань знову",
"You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Ви використали <strong>%s</strong> із доступних <strong>%s</strong>",
"Password" => "Пароль",
@@ -84,20 +187,52 @@ $TRANSLATIONS = array(
"Current password" => "Поточний пароль",
"New password" => "Новий пароль",
"Change password" => "Змінити пароль",
+"Full Name" => "Повне Ім'я",
"Email" => "Ел.пошта",
"Your email address" => "Ваша адреса електронної пошти",
+"Fill in an email address to enable password recovery and receive notifications" => "Введіть адресу електронної пошти, щоб ввімкнути відновлення паролю та отримання повідомлень",
+"Profile picture" => "Зображення облікового запису",
+"Upload new" => "Завантажити нове",
+"Select new from Files" => "Обрати із завантажених файлів",
+"Remove image" => "Видалити зображення",
+"Either png or jpg. Ideally square but you will be able to crop it." => "Допустимі формати: png і jpg. Якщо зображення не квадратне, то ви зможете його обрізати.",
+"Your avatar is provided by your original account." => "Буде використано аватар вашого оригінального облікового запису.",
"Cancel" => "Відмінити",
+"Choose as profile image" => "Обрати зображенням облікового запису",
"Language" => "Мова",
"Help translate" => "Допомогти з перекладом",
-"SSL root certificates" => "SSL корневі сертифікати",
+"Common Name" => "Ім'я:",
+"Valid until" => "Дійсно до",
+"Issued By" => "Виданий",
+"Valid until %s" => "Дійсно до %s",
"Import Root Certificate" => "Імпортувати корневі сертифікати",
+"The encryption app is no longer enabled, please decrypt all your files" => "Додаток для шифрування вимкнено, будь ласка, розшифруйте ваші файли",
+"Log-in password" => "Пароль входу",
+"Decrypt all Files" => "Розшифрувати всі файли",
+"Your encryption keys are moved to a backup location. If something went wrong you can restore the keys. Only delete them permanently if you are sure that all files are decrypted correctly." => "Ваші ключі шифрування переміщено до теки резервного копіювання. Якщо щось піде не так, ви зможете відновити їх. Видаляйте ключі лише в тому випадку, коли всі файли розшифровані.",
+"Restore Encryption Keys" => "Відновити ключі шифрування",
+"Delete Encryption Keys" => "Видалити ключі шифрування",
+"Show storage location" => "Показати місцезнаходження сховища",
+"Show last log in" => "Показати останній вхід в систему",
"Login Name" => "Ім'я Логіну",
"Create" => "Створити",
+"Admin Recovery Password" => "Пароль адміністратора для відновлення",
+"Enter the recovery password in order to recover the users files during password change" => "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю",
+"Search Users and Groups" => "Шукати користувачів та групи",
+"Add Group" => "Додати групу",
+"Group" => "Група",
+"Everyone" => "Всі",
+"Admins" => "Адміністратори",
"Default Quota" => "Квота за замовчуванням",
+"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "Будь ласка, вкажіть розмір сховища (наприклад: \"512 MB\" або \"12 GB\")",
"Unlimited" => "Необмежено",
"Other" => "Інше",
"Username" => "Ім'я користувача",
+"Group Admin for" => "Адміністратор групи",
"Quota" => "Квота",
+"Storage Location" => "Місцезнаходження сховища",
+"Last Login" => "Останній вхід",
+"change full name" => "змінити ім'я",
"set new password" => "встановити новий пароль",
"Default" => "За замовчуванням"
);
diff --git a/settings/l10n/ur_PK.php b/settings/l10n/ur_PK.php
index 39973159745..17e7d843f3f 100644
--- a/settings/l10n/ur_PK.php
+++ b/settings/l10n/ur_PK.php
@@ -1,8 +1,7 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "ارسال شدہ ای میل ",
"Invalid request" => "غلط درخواست",
-"Error" => "ایرر",
+"Email sent" => "ارسال شدہ ای میل ",
"Very weak password" => "بہت کمزور پاسورڈ",
"Weak password" => "کمزور پاسورڈ",
"So-so password" => "نص نص پاسورڈ",
diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php
index 85a909eeefa..5abff6a4e6b 100644
--- a/settings/l10n/vi.php
+++ b/settings/l10n/vi.php
@@ -1,8 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Email sent" => "Email đã được gửi",
-"Encryption" => "Mã hóa",
-"Unable to load list from App Store" => "Không thể tải danh sách ứng dụng từ App Store",
+"Enabled" => "Bật",
"Authentication error" => "Lỗi xác thực",
"Your full name has been changed." => "Họ và tên đã được thay đổi.",
"Unable to change full name" => "Họ và tên không thể đổi ",
@@ -18,23 +16,21 @@ $TRANSLATIONS = array(
"Unable to add user to group %s" => "Không thể thêm người dùng vào nhóm %s",
"Unable to remove user from group %s" => "Không thể xóa người dùng từ nhóm %s",
"Couldn't update app." => "Không thể cập nhật ứng dụng",
+"Email sent" => "Email đã được gửi",
"All" => "Tất cả",
-"User Documentation" => "Tài liệu người sử dụng",
-"Update to {appversion}" => "Cập nhật lên {appversion}",
+"Please wait...." => "Xin hãy đợi...",
"Disable" => "Tắt",
"Enable" => "Bật",
-"Please wait...." => "Xin hãy đợi...",
"Updating...." => "Đang cập nhật...",
"Error while updating app" => "Lỗi khi cập nhật ứng dụng",
-"Error" => "Lỗi",
-"Update" => "Cập nhật",
"Updated" => "Đã cập nhật",
"Delete" => "Xóa",
"Groups" => "Nhóm",
"undo" => "lùi lại",
-"Group Admin" => "Nhóm quản trị",
"never" => "không thay đổi",
"__language_name__" => "__Ngôn ngữ___",
+"SSL root certificates" => "Chứng chỉ SSL root",
+"Encryption" => "Mã hóa",
"None" => "Không gì cả",
"Login" => "Đăng nhập",
"Security Warning" => "Cảnh bảo bảo mật",
@@ -52,11 +48,8 @@ $TRANSLATIONS = array(
"Less" => "ít",
"Version" => "Phiên bản",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Được phát triển bởi <a href=\"http://ownCloud.org/contact\" target=\"_blank\">cộng đồng ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">mã nguồn </a> đã được cấp phép theo chuẩn <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
-"Add your App" => "Thêm ứng dụng của bạn",
-"More Apps" => "Nhiều ứng dụng hơn",
-"Select an App" => "Chọn một ứng dụng",
-"See application page at apps.owncloud.com" => "Xem nhiều ứng dụng hơn tại apps.owncloud.com",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-Giấy phép được cấp bởi <span class=\"author\"></span>",
+"by" => "bởi",
+"User Documentation" => "Tài liệu người sử dụng",
"Administrator Documentation" => "Tài liệu quản trị",
"Online Documentation" => "Tài liệu trực tuyến",
"Forum" => "Diễn đàn",
@@ -80,7 +73,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "Chọn hình ảnh như hồ sơ cá nhân",
"Language" => "Ngôn ngữ",
"Help translate" => "Hỗ trợ dịch thuật",
-"SSL root certificates" => "Chứng chỉ SSL root",
"Import Root Certificate" => "Nhập Root Certificate",
"Login Name" => "Tên đăng nhập",
"Create" => "Tạo",
diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php
index 3c2dca4c0b1..49c8021e2a5 100644
--- a/settings/l10n/zh_CN.php
+++ b/settings/l10n/zh_CN.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "%s 获得了无效值",
-"Saved" => "已保存",
-"test email settings" => "测试电子邮件设置",
-"If you received this email, the settings seem to be correct." => "如果您收到了这封邮件,看起来设置没有问题。",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "发送电子邮件时发生了问题。请检查您的设置。",
-"Email sent" => "邮件已发送",
-"You need to set your user email before being able to send test emails." => "在发送测试邮件前您需要设置您的用户电子邮件。",
-"Send mode" => "发送模式",
-"Encryption" => "加密",
-"Authentication method" => "认证方法",
-"Unable to load list from App Store" => "无法从应用商店载入列表",
+"Enabled" => "开启",
"Authentication error" => "认证错误",
"Your full name has been changed." => "您的全名已修改。",
"Unable to change full name" => "无法修改全名",
@@ -40,23 +30,22 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "错误的管理员恢复密码。请检查密码并重试。",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "后端不支持修改密码,但是用户的加密密码已成功更新。",
"Unable to change password" => "不能更改密码",
+"Saved" => "已保存",
+"test email settings" => "测试电子邮件设置",
+"If you received this email, the settings seem to be correct." => "如果您收到了这封邮件,看起来设置没有问题。",
+"Email sent" => "邮件已发送",
+"You need to set your user email before being able to send test emails." => "在发送测试邮件前您需要设置您的用户电子邮件。",
"Are you really sure you want add \"{domain}\" as trusted domain?" => "你真的希望添加 \"{domain}\" 为信任域?",
"Add trusted domain" => "添加信任域",
"Sending..." => "正在发送...",
"All" => "全部",
-"User Documentation" => "用户文档",
-"Admin Documentation" => "管理员文档",
-"Update to {appversion}" => "更新至 {appversion}",
-"Uninstall App" => "下载应用",
-"Disable" => "禁用",
-"Enable" => "开启",
"Please wait...." => "请稍等....",
"Error while disabling app" => "禁用 app 时出错",
+"Disable" => "禁用",
+"Enable" => "开启",
"Error while enabling app" => "启用 app 时出错",
"Updating...." => "正在更新....",
"Error while updating app" => "更新 app 时出错",
-"Error" => "错误",
-"Update" => "更新",
"Updated" => "已更新",
"Uninstalling ...." => "卸载中....",
"Error while uninstalling app" => "卸载应用时发生了一个错误",
@@ -78,7 +67,6 @@ $TRANSLATIONS = array(
"A valid group name must be provided" => "请提供一个有效的组名称",
"deleted {groupName}" => "已删除 {groupName}",
"undo" => "撤销",
-"Group Admin" => "组管理员",
"never" => "从不",
"deleted {userName}" => "已删除 {userName}",
"add group" => "增加组",
@@ -87,6 +75,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "必须提供合法的密码",
"Warning: Home directory for user \"{user}\" already exists" => "警告:用户 \"{user}\" 的家目录已存在",
"__language_name__" => "简体中文",
+"SSL root certificates" => "SSL根证书",
+"Encryption" => "加密",
"Everything (fatal issues, errors, warnings, info, debug)" => "所有(灾难性问题,错误,警告,信息,调试)",
"Info, warnings, errors and fatal issues" => "信息,警告,错误和灾难性问题",
"Warnings, errors and fatal issues" => "警告,错误和灾难性问题",
@@ -148,8 +138,10 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "请经由HTTPS连接到这个%s 实例来启用或禁用强制SSL.",
"Email Server" => "电子邮件服务器",
"This is used for sending out notifications." => "这被用于发送通知。",
+"Send mode" => "发送模式",
"From address" => "来自地址",
"mail" => "邮件",
+"Authentication method" => "认证方法",
"Authentication required" => "需要认证",
"Server address" => "服务器地址",
"Port" => "端口",
@@ -164,14 +156,13 @@ $TRANSLATIONS = array(
"Less" => "更少",
"Version" => "版本",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "由<a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud社区</a>开发, <a href=\"https://github.com/owncloud\" target=\"_blank\">源代码</a>在<a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>许可证下发布。",
-"Add your App" => "增加应用",
-"More Apps" => "更多应用",
-"Select an App" => "选择一个应用",
+"More apps" => "更多应用",
+"by" => "被",
"Documentation:" => "文档:",
-"See application page at apps.owncloud.com" => "查看在 app.owncloud.com 的应用程序页面",
-"See application website" => "参见应用程序网站",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-核准: <span class=\"author\"></span>",
+"User Documentation" => "用户文档",
+"Admin Documentation" => "管理员文档",
"Enable only for specific groups" => "仅对特定的组开放",
+"Uninstall App" => "下载应用",
"Administrator Documentation" => "管理员文档",
"Online Documentation" => "在线文档",
"Forum" => "论坛",
@@ -201,7 +192,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "用作头像",
"Language" => "语言",
"Help translate" => "帮助翻译",
-"SSL root certificates" => "SSL根证书",
"Common Name" => "通用名称",
"Valid until" => "有效期至",
"Issued By" => "授权由",
diff --git a/settings/l10n/zh_HK.php b/settings/l10n/zh_HK.php
index 1ad784d87dd..c969e884037 100644
--- a/settings/l10n/zh_HK.php
+++ b/settings/l10n/zh_HK.php
@@ -1,18 +1,17 @@
<?php
$TRANSLATIONS = array(
+"Enabled" => "啟用",
+"Wrong password" => "密碼錯誤",
"Saved" => "已儲存",
"Email sent" => "郵件已傳",
-"Encryption" => "加密",
-"Wrong password" => "密碼錯誤",
"Sending..." => "發送中...",
"Disable" => "停用",
"Enable" => "啟用",
"Updating...." => "更新中....",
-"Error" => "錯誤",
-"Update" => "更新",
"Updated" => "已更新",
"Delete" => "刪除",
"Groups" => "群組",
+"Encryption" => "加密",
"None" => "空",
"Login" => "登入",
"SSL" => "SSL",
diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php
index 0ea23f25c86..20a10a926ac 100644
--- a/settings/l10n/zh_TW.php
+++ b/settings/l10n/zh_TW.php
@@ -1,16 +1,6 @@
<?php
$TRANSLATIONS = array(
-"Invalid value supplied for %s" => "無效的提供值 %s",
-"Saved" => "已儲存",
-"test email settings" => "測試郵件設定",
-"If you received this email, the settings seem to be correct." => "假如您收到這個郵件,此設定看起來是正確的。",
-"A problem occurred while sending the e-mail. Please revisit your settings." => "當寄出郵件時發生問題。請重新檢視您的設定。",
-"Email sent" => "Email 已寄出",
-"You need to set your user email before being able to send test emails." => "在準備要寄出測試郵件時您需要設定您的使用者郵件。",
-"Send mode" => "寄送模式",
-"Encryption" => "加密",
-"Authentication method" => "驗證方式",
-"Unable to load list from App Store" => "無法從 App Store 讀取清單",
+"Enabled" => "已啓用",
"Authentication error" => "認證錯誤",
"Your full name has been changed." => "您的全名已變更。",
"Unable to change full name" => "無法變更全名",
@@ -35,20 +25,20 @@ $TRANSLATIONS = array(
"Wrong admin recovery password. Please check the password and try again." => "錯誤的管理者還原密碼",
"Back-end doesn't support password change, but the users encryption key was successfully updated." => "後端不支援變更密碼,但成功更新使用者的加密金鑰",
"Unable to change password" => "無法修改密碼",
+"Saved" => "已儲存",
+"test email settings" => "測試郵件設定",
+"If you received this email, the settings seem to be correct." => "假如您收到這個郵件,此設定看起來是正確的。",
+"Email sent" => "Email 已寄出",
+"You need to set your user email before being able to send test emails." => "在準備要寄出測試郵件時您需要設定您的使用者郵件。",
"Sending..." => "寄送中...",
"All" => "所有",
-"User Documentation" => "用戶說明文件",
-"Admin Documentation" => "管理者文件",
-"Update to {appversion}" => "更新至 {appversion}",
-"Disable" => "停用",
-"Enable" => "啟用",
"Please wait...." => "請稍候...",
"Error while disabling app" => "停用應用程式錯誤",
+"Disable" => "停用",
+"Enable" => "啟用",
"Error while enabling app" => "啓用應用程式錯誤",
"Updating...." => "更新中...",
"Error while updating app" => "更新應用程式錯誤",
-"Error" => "錯誤",
-"Update" => "更新",
"Updated" => "已更新",
"Select a profile picture" => "選擇大頭貼",
"Very weak password" => "非常弱的密碼",
@@ -60,7 +50,6 @@ $TRANSLATIONS = array(
"Decrypting files... Please wait, this can take some time." => "檔案解密中,請稍候。",
"Groups" => "群組",
"undo" => "復原",
-"Group Admin" => "群組管理員",
"never" => "永不",
"add group" => "新增群組",
"A valid username must be provided" => "必須提供一個有效的用戶名",
@@ -68,6 +57,8 @@ $TRANSLATIONS = array(
"A valid password must be provided" => "一定要提供一個有效的密碼",
"Warning: Home directory for user \"{user}\" already exists" => "警告:使用者 {user} 的家目錄已經存在",
"__language_name__" => "__language_name__",
+"SSL root certificates" => "SSL 根憑證",
+"Encryption" => "加密",
"Everything (fatal issues, errors, warnings, info, debug)" => "全部(嚴重問題,錯誤,警告,資訊,除錯)",
"Info, warnings, errors and fatal issues" => "資訊,警告,錯誤和嚴重問題",
"Warnings, errors and fatal issues" => "警告,錯誤和嚴重問題",
@@ -109,7 +100,9 @@ $TRANSLATIONS = array(
"Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "請使用 HTTPS 連線到 %s 以啓用或停用強制 SSL 加密。",
"Email Server" => "郵件伺服器",
"This is used for sending out notifications." => "這是使用於寄送通知。",
+"Send mode" => "寄送模式",
"From address" => "寄件地址",
+"Authentication method" => "驗證方式",
"Authentication required" => "必須驗證",
"Server address" => "伺服器位址",
"Port" => "連接埠",
@@ -124,13 +117,11 @@ $TRANSLATIONS = array(
"Less" => "更少",
"Version" => "版本",
"Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "由 <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud 社群</a>開發,<a href=\"https://github.com/owncloud\" target=\"_blank\">原始碼</a>在 <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a> 授權許可下發布。",
-"Add your App" => "添加你的 App",
-"More Apps" => "更多Apps",
-"Select an App" => "選擇一個應用程式",
+"More apps" => "更多 Apps",
+"by" => "由",
"Documentation:" => "文件:",
-"See application page at apps.owncloud.com" => "查看應用程式頁面於 apps.owncloud.com",
-"See application website" => "檢視應用程式網站",
-"<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-核准: <span class=\"author\"></span>",
+"User Documentation" => "用戶說明文件",
+"Admin Documentation" => "管理者文件",
"Administrator Documentation" => "管理者說明文件",
"Online Documentation" => "線上說明文件",
"Forum" => "論壇",
@@ -159,7 +150,6 @@ $TRANSLATIONS = array(
"Choose as profile image" => "設定為大頭貼",
"Language" => "語言",
"Help translate" => "幫助翻譯",
-"SSL root certificates" => "SSL 根憑證",
"Import Root Certificate" => "匯入根憑證",
"The encryption app is no longer enabled, please decrypt all your files" => "加密的軟體不能長時間啟用,請解密所有您的檔案",
"Log-in password" => "登入密碼",
diff --git a/settings/personal.php b/settings/personal.php
index e6f53d62704..ecbec887da8 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -101,9 +101,38 @@ $tmpl->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true));
$tmpl->assign('avatarChangeSupported', OC_User::canUserChangeAvatar(OC_User::getUser()));
$tmpl->assign('certs', $certificateManager->listCertificates());
+// add hardcoded forms from the template
+$l = OC_L10N::get('settings');
+$formsAndMore = array();
+$formsAndMore[]= array( 'anchor' => 'passwordform', 'section-name' => $l->t('Personal Info') );
+
$forms=OC_App::getForms('personal');
-$tmpl->assign('forms', array());
-foreach($forms as $form) {
- $tmpl->append('forms', $form);
+
+$formsMap = array_map(function($form){
+ if (preg_match('%(<h2[^>]*>.*?</h2>)%i', $form, $regs)) {
+ $sectionName = str_replace('<h2>', '', $regs[0]);
+ $sectionName = str_replace('</h2>', '', $sectionName);
+ $anchor = strtolower($sectionName);
+ $anchor = str_replace(' ', '-', $anchor);
+
+ return array(
+ 'anchor' => $anchor,
+ 'section-name' => $sectionName,
+ 'form' => $form
+ );
+ }
+ return array(
+ 'form' => $form
+ );
+}, $forms);
+
+$formsAndMore = array_merge($formsAndMore, $formsMap);
+
+// add bottom hardcoded forms from the template
+$formsAndMore[]= array( 'anchor' => 'ssl-root-certificates', 'section-name' => $l->t('SSL root certificates') );
+if($enableDecryptAll) {
+ $formsAndMore[]= array( 'anchor' => 'encryption', 'section-name' => $l->t('Encryption') );
}
+
+$tmpl->assign('forms', $formsAndMore);
$tmpl->printPage();
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 871a0ec9e39..cc04de5ec38 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -7,6 +7,20 @@
/** @var $_ array */
?>
+<div id="app-navigation">
+ <ul>
+ <?php foreach($_['forms'] as $form) {
+ if (isset($form['anchor'])) {
+ $anchor = '#' . $form['anchor'];
+ $sectionName = $form['section-name'];
+ print_unescaped(sprintf("<li><a href='%s'>%s</a></li>", OC_Util::sanitizeHTML($anchor), OC_Util::sanitizeHTML($sectionName)));
+ }
+ }?>
+ </ul>
+</div>
+
+<div id="app-content">
+
<div class="clientsbox center">
<h2><?php p($l->t('Get the apps to sync your files'));?></h2>
<a href="<?php p($_['clients']['desktop']); ?>" target="_blank">
@@ -150,10 +164,12 @@ if($_['passwordChangeSupported']) {
</form>
<?php foreach($_['forms'] as $form) {
- print_unescaped($form);
+ if (isset($form['form'])) {?>
+ <div id="<?php isset($form['anchor']) ? p($form['anchor']) : p('');?>"><?php print_unescaped($form['form']);?></div>
+ <?php }
};?>
-<div class="section">
+<div id="ssl-root-certificates" class="section">
<h2><?php p($l->t('SSL root certificates')); ?></h2>
<table id="sslCertificate" class="grid">
<thead>
@@ -192,7 +208,7 @@ if($_['passwordChangeSupported']) {
</div>
<?php if($_['enableDecryptAll']): ?>
-<div class="section">
+<div id="encryption" class="section">
<h2>
<?php p( $l->t( 'Encryption' ) ); ?>
@@ -254,3 +270,7 @@ if($_['passwordChangeSupported']) {
<div class="section credits-footer">
<p><?php print_unescaped($theme->getShortFooter()); ?></p>
</div>
+
+
+
+</div>
diff --git a/settings/templates/users/part.userlist.php b/settings/templates/users/part.userlist.php
index 25b17275858..964aef600a2 100644
--- a/settings/templates/users/part.userlist.php
+++ b/settings/templates/users/part.userlist.php
@@ -9,7 +9,7 @@
<th id="headerPassword"><?php p($l->t( 'Password' )); ?></th>
<th id="headerGroups"><?php p($l->t( 'Groups' )); ?></th>
<?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
- <th id="headerSubAdmins"><?php p($l->t('Group Admin')); ?></th>
+ <th id="headerSubAdmins"><?php p($l->t('Group Admin for')); ?></th>
<?php endif;?>
<th id="headerQuota"><?php p($l->t('Quota')); ?></th>
<th id="headerStorageLocation"><?php p($l->t('Storage Location')); ?></th>
@@ -38,7 +38,7 @@
class="groupsselect"
data-username="<?php p($user['name']) ;?>"
data-user-groups="<?php p(json_encode($user['groups'])) ;?>"
- data-placeholder="groups" title="<?php p($l->t('Groups'))?>"
+ data-placeholder="groups" title="<?php p($l->t('no group'))?>"
multiple="multiple">
<?php foreach($_["adminGroup"] as $adminGroup): ?>
<option value="<?php p($adminGroup['name']);?>"><?php p($adminGroup['name']); ?></option>
@@ -54,7 +54,7 @@
class="subadminsselect"
data-username="<?php p($user['name']) ;?>"
data-subadmin="<?php p(json_encode($user['subadmin']));?>"
- data-placeholder="subadmins" title="<?php p($l->t('Group Admin'))?>"
+ data-placeholder="subadmins" title="<?php p($l->t('no group'))?>"
multiple="multiple">
<?php foreach($_["subadmingroups"] as $group): ?>
<option value="<?php p($group);?>"><?php p($group);?></option>
diff --git a/tests/lib/appframework/middleware/sessionmiddlewaretest.php b/tests/lib/appframework/middleware/sessionmiddlewaretest.php
new file mode 100644
index 00000000000..13e558bf21a
--- /dev/null
+++ b/tests/lib/appframework/middleware/sessionmiddlewaretest.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * ownCloud - App Framework
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ * @copyright Thomas Müller 2014
+ */
+
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Middleware\SessionMiddleware;
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OCP\AppFramework\Http\Response;
+
+
+class SessionMiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var ControllerMethodReflector
+ */
+ private $reflector;
+
+ /**
+ * @var Request
+ */
+ private $request;
+
+ protected function setUp() {
+ $this->request = new Request();
+ $this->reflector = new ControllerMethodReflector();
+ }
+
+ /**
+ * @UseSession
+ */
+ public function testSessionNotClosedOnBeforeController() {
+ $session = $this->getSessionMock(0);
+
+ $this->reflector->reflect($this, __FUNCTION__);
+ $middleware = new SessionMiddleware($this->request, $this->reflector, $session);
+ $middleware->beforeController($this, __FUNCTION__);
+ }
+
+ /**
+ * @UseSession
+ */
+ public function testSessionClosedOnAfterController() {
+ $session = $this->getSessionMock(1);
+
+ $this->reflector->reflect($this, __FUNCTION__);
+ $middleware = new SessionMiddleware($this->request, $this->reflector, $session);
+ $middleware->afterController($this, __FUNCTION__, new Response());
+ }
+
+ public function testSessionClosedOnBeforeController() {
+ $session = $this->getSessionMock(1);
+
+ $this->reflector->reflect($this, __FUNCTION__);
+ $middleware = new SessionMiddleware($this->request, $this->reflector, $session);
+ $middleware->beforeController($this, __FUNCTION__);
+ }
+
+ public function testSessionNotClosedOnAfterController() {
+ $session = $this->getSessionMock(0);
+
+ $this->reflector->reflect($this, __FUNCTION__);
+ $middleware = new SessionMiddleware($this->request, $this->reflector, $session);
+ $middleware->afterController($this, __FUNCTION__, new Response());
+ }
+
+ /**
+ * @return mixed
+ */
+ private function getSessionMock($expectedCloseCount) {
+ $session = $this->getMockBuilder('\OC\Session\Memory')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $session->expects($this->exactly($expectedCloseCount))
+ ->method('close');
+ return $session;
+ }
+
+}
diff --git a/tests/lib/db/mdb2schemamanager.php b/tests/lib/db/mdb2schemamanager.php
index dd9ee3adb8e..527b2cba648 100644
--- a/tests/lib/db/mdb2schemamanager.php
+++ b/tests/lib/db/mdb2schemamanager.php
@@ -9,6 +9,9 @@
namespace Test\DB;
+use Doctrine\DBAL\Platforms\OraclePlatform;
+use Doctrine\DBAL\Platforms\SQLServerPlatform;
+
class MDB2SchemaManager extends \PHPUnit_Framework_TestCase {
public function tearDown() {
@@ -22,11 +25,14 @@ class MDB2SchemaManager extends \PHPUnit_Framework_TestCase {
public function testAutoIncrement() {
- if (\OC::$server->getConfig()->getSystemValue('dbtype', 'sqlite') === 'oci') {
+ $connection = \OC_DB::getConnection();
+ if ($connection->getDatabasePlatform() instanceof OraclePlatform) {
$this->markTestSkipped('Adding auto increment columns in Oracle is not supported.');
}
+ if ($connection->getDatabasePlatform() instanceof SQLServerPlatform) {
+ $this->markTestSkipped('DB migration tests are not supported on MSSQL');
+ }
- $connection = \OC_DB::getConnection();
$manager = new \OC\DB\MDB2SchemaManager($connection);
$manager->createDbFromStructure(__DIR__ . '/ts-autoincrement-before.xml');
diff --git a/tests/lib/db/migrator.php b/tests/lib/db/migrator.php
index 2e49086bd63..09742a53eb4 100644
--- a/tests/lib/db/migrator.php
+++ b/tests/lib/db/migrator.php
@@ -10,6 +10,8 @@
namespace Test\DB;
use \Doctrine\DBAL\DBALException;
+use Doctrine\DBAL\Platforms\OraclePlatform;
+use Doctrine\DBAL\Platforms\SQLServerPlatform;
use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig;
@@ -28,8 +30,11 @@ class Migrator extends \PHPUnit_Framework_TestCase {
public function setUp() {
$this->connection = \OC_DB::getConnection();
- if ($this->connection->getDriver() instanceof \Doctrine\DBAL\Driver\OCI8\Driver) {
- $this->markTestSkipped('DB migration tests arent supported on OCI');
+ if ($this->connection->getDatabasePlatform() instanceof OraclePlatform) {
+ $this->markTestSkipped('DB migration tests are not supported on OCI');
+ }
+ if ($this->connection->getDatabasePlatform() instanceof SQLServerPlatform) {
+ $this->markTestSkipped('DB migration tests are not supported on MSSQL');
}
$this->manager = new \OC\DB\MDB2SchemaManager($this->connection);
$this->tableName = 'test_' . uniqid();
@@ -73,7 +78,7 @@ class Migrator extends \PHPUnit_Framework_TestCase {
*/
public function testDuplicateKeyUpgrade() {
if ($this->isSQLite()) {
- $this->markTestSkipped('sqlite doesnt throw errors when creating a new key on existing data');
+ $this->markTestSkipped('sqlite does not throw errors when creating a new key on existing data');
}
list($startSchema, $endSchema) = $this->getDuplicateKeySchemas();
$migrator = $this->manager->getMigrator();
diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php
index c07e32a404e..d31bd34124e 100644
--- a/tests/lib/dbschema.php
+++ b/tests/lib/dbschema.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
* This file is licensed under the Affero General Public License version 3 or
@@ -6,6 +7,8 @@
* See the COPYING-README file.
*/
+use OCP\Security\ISecureRandom;
+
class Test_DBSchema extends PHPUnit_Framework_TestCase {
protected $schema_file = 'static://test_db_scheme';
protected $schema_file2 = 'static://test_db_scheme2';
@@ -16,7 +19,8 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase {
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml';
$dbfile2 = OC::$SERVERROOT.'/tests/data/db_structure2.xml';
- $r = '_'.OC_Util::generateRandomBytes(4).'_';
+ $r = '_' . \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->
+ generate(4, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS) . '_';
$content = file_get_contents( $dbfile );
$content = str_replace( '*dbprefix*', '*dbprefix*'.$r, $content );
file_put_contents( $this->schema_file, $content );
@@ -38,6 +42,10 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase {
* @medium
*/
public function testSchema() {
+ $platform = \OC_DB::getConnection()->getDatabasePlatform();
+ if ($platform instanceof \Doctrine\DBAL\Platforms\SQLServerPlatform) {
+ $this->markTestSkipped("Test not relevant on MSSQL");
+ }
$this->doTestSchemaCreating();
$this->doTestSchemaChanging();
$this->doTestSchemaDumping();
@@ -80,8 +88,8 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase {
* @param string $table
*/
public function assertTableNotExist($table) {
- $type=OC_Config::getValue( "dbtype", "sqlite" );
- if( $type == 'sqlite' || $type == 'sqlite3' ) {
+ $platform = \OC_DB::getConnection()->getDatabasePlatform();
+ if ($platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
// sqlite removes the tables after closing the DB
$this->assertTrue(true);
} else {
diff --git a/tests/lib/files/storage/local.php b/tests/lib/files/storage/local.php
index 1aad138aa33..37462941d0c 100644
--- a/tests/lib/files/storage/local.php
+++ b/tests/lib/files/storage/local.php
@@ -1,24 +1,24 @@
<?php
/**
-* ownCloud
-*
-* @author Robin Appelman
-* @copyright 2012 Robin Appelman icewind@owncloud.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-*
-* You should have received a copy of the GNU Affero General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @copyright 2012 Robin Appelman icewind@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
namespace Test\Files\Storage;
@@ -27,13 +27,38 @@ class Local extends Storage {
* @var string tmpDir
*/
private $tmpDir;
+
public function setUp() {
- $this->tmpDir=\OC_Helper::tmpFolder();
- $this->instance=new \OC\Files\Storage\Local(array('datadir'=>$this->tmpDir));
+ $this->tmpDir = \OC_Helper::tmpFolder();
+ $this->instance = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir));
}
public function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
}
+
+ public function testStableEtag() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('On Windows platform we have no stable etag generation - yet');
+ }
+
+ $this->instance->file_put_contents('test.txt', 'foobar');
+ $etag1 = $this->instance->getETag('test.txt');
+ $etag2 = $this->instance->getETag('test.txt');
+ $this->assertEquals($etag1, $etag2);
+ }
+
+ public function testEtagChange() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('On Windows platform we have no stable etag generation - yet');
+ }
+
+ $this->instance->file_put_contents('test.txt', 'foo');
+ $this->instance->touch('test.txt', time() - 2);
+ $etag1 = $this->instance->getETag('test.txt');
+ $this->instance->file_put_contents('test.txt', 'bar');
+ $etag2 = $this->instance->getETag('test.txt');
+ $this->assertNotEquals($etag1, $etag2);
+ }
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 522535946a5..8d56ecd9003 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -588,19 +588,32 @@ class View extends \PHPUnit_Framework_TestCase {
$rootView = new \OC\Files\View('');
$longPath = '';
- // 4000 is the maximum path length in file_cache.path
+ $ds = DIRECTORY_SEPARATOR;
+ /*
+ * 4096 is the maximum path length in file_cache.path in *nix
+ * 1024 is the max path length in mac
+ * 228 is the max path length in windows
+ */
$folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789';
- $depth = (4000 / 57);
+ $tmpdirLength = strlen(\OC_Helper::tmpFolder());
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped();
+ $depth = ((260 - $tmpdirLength) / 57);
+ }elseif(\OC_Util::runningOnMac()){
+ $depth = ((1024 - $tmpdirLength) / 57);
+ } else {
+ $depth = ((4000 - $tmpdirLength) / 57);
+ }
foreach (range(0, $depth - 1) as $i) {
- $longPath .= '/' . $folderName;
+ $longPath .= $ds . $folderName;
$result = $rootView->mkdir($longPath);
$this->assertTrue($result, "mkdir failed on $i - path length: " . strlen($longPath));
- $result = $rootView->file_put_contents($longPath . '/test.txt', 'lorem');
+ $result = $rootView->file_put_contents($longPath . "{$ds}test.txt", 'lorem');
$this->assertEquals(5, $result, "file_put_contents failed on $i");
$this->assertTrue($rootView->file_exists($longPath));
- $this->assertTrue($rootView->file_exists($longPath . '/test.txt'));
+ $this->assertTrue($rootView->file_exists($longPath . "{$ds}test.txt"));
}
$cache = $storage->getCache();
@@ -617,7 +630,7 @@ class View extends \PHPUnit_Framework_TestCase {
$this->assertTrue(is_array($cachedFile), "No cache entry for file at $i");
$this->assertEquals('test.txt', $cachedFile['name'], "Wrong cache entry for file at $i");
- $longPath .= '/' . $folderName;
+ $longPath .= $ds . $folderName;
}
}
diff --git a/tests/lib/group/manager.php b/tests/lib/group/manager.php
index 70d9783946a..8fd19513c0a 100644
--- a/tests/lib/group/manager.php
+++ b/tests/lib/group/manager.php
@@ -190,7 +190,7 @@ class Manager extends \PHPUnit_Framework_TestCase {
$groups = $manager->search('1');
$this->assertEquals(1, count($groups));
- $group1 = $groups[0];
+ $group1 = reset($groups);
$this->assertEquals('group1', $group1->getGID());
}
@@ -229,8 +229,8 @@ class Manager extends \PHPUnit_Framework_TestCase {
$groups = $manager->search('1');
$this->assertEquals(2, count($groups));
- $group1 = $groups[0];
- $group12 = $groups[1];
+ $group1 = reset($groups);
+ $group12 = next($groups);
$this->assertEquals('group1', $group1->getGID());
$this->assertEquals('group12', $group12->getGID());
}
@@ -270,8 +270,8 @@ class Manager extends \PHPUnit_Framework_TestCase {
$groups = $manager->search('1', 2, 1);
$this->assertEquals(2, count($groups));
- $group1 = $groups[0];
- $group12 = $groups[1];
+ $group1 = reset($groups);
+ $group12 = next($groups);
$this->assertEquals('group1', $group1->getGID());
$this->assertEquals('group12', $group12->getGID());
}
@@ -300,7 +300,7 @@ class Manager extends \PHPUnit_Framework_TestCase {
$groups = $manager->getUserGroups(new User('user1', $userBackend));
$this->assertEquals(1, count($groups));
- $group1 = $groups[0];
+ $group1 = reset($groups);
$this->assertEquals('group1', $group1->getGID());
}
@@ -340,8 +340,8 @@ class Manager extends \PHPUnit_Framework_TestCase {
$groups = $manager->getUserGroups(new User('user1', $userBackend));
$this->assertEquals(2, count($groups));
- $group1 = $groups[0];
- $group2 = $groups[1];
+ $group1 = reset($groups);
+ $group2 = next($groups);
$this->assertEquals('group1', $group1->getGID());
$this->assertEquals('group2', $group2->getGID());
}
@@ -369,15 +369,6 @@ class Manager extends \PHPUnit_Framework_TestCase {
}
}));
- $backend->expects($this->once())
- ->method('implementsActions')
- ->will($this->returnValue(true));
-
- $backend->expects($this->once())
- ->method('countUsersInGroup')
- ->with('testgroup', '')
- ->will($this->returnValue(2));
-
/**
* @var \OC\User\Manager $userManager
*/
@@ -496,9 +487,9 @@ class Manager extends \PHPUnit_Framework_TestCase {
->with('testgroup')
->will($this->returnValue(true));
- $backend->expects($this->any())
- ->method('InGroup')
- ->will($this->returnCallback(function($uid, $gid) {
+ $backend->expects($this->any())
+ ->method('inGroup')
+ ->will($this->returnCallback(function($uid) {
switch($uid) {
case 'user1' : return false;
case 'user2' : return true;
@@ -521,9 +512,12 @@ class Manager extends \PHPUnit_Framework_TestCase {
->with('user3')
->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
switch($offset) {
- case 0 : return array('user3' => new User('user3', $userBackend),
- 'user33' => new User('user33', $userBackend));
- case 2 : return array('user333' => new User('user333', $userBackend));
+ case 0 :
+ return array(
+ 'user3' => new User('user3', $userBackend),
+ 'user33' => new User('user33', $userBackend),
+ 'user333' => new User('user333', $userBackend)
+ );
}
}));
@@ -727,7 +721,7 @@ class Manager extends \PHPUnit_Framework_TestCase {
// check result
$groups = $manager->getUserGroups($user1);
$this->assertEquals(1, count($groups));
- $group1 = $groups[0];
+ $group1 = reset($groups);
$this->assertEquals('group1', $group1->getGID());
}
@@ -768,7 +762,7 @@ class Manager extends \PHPUnit_Framework_TestCase {
$user1 = new User('user1', null);
$groups = $manager->getUserGroups($user1);
$this->assertEquals(1, count($groups));
- $group1 = $groups[0];
+ $group1 = reset($groups);
$this->assertEquals('group1', $group1->getGID());
// remove user
diff --git a/tests/lib/l10n.php b/tests/lib/l10n.php
index 5ddf2290c35..a97fa22f05c 100644
--- a/tests/lib/l10n.php
+++ b/tests/lib/l10n.php
@@ -52,17 +52,67 @@ class Test_L10n extends PHPUnit_Framework_TestCase {
$this->assertEquals('5 oken', (string)$l->n('%n window', '%n windows', 5));
}
+ public function localizationDataProvider() {
+ return array(
+ // timestamp as string
+ array('February 13, 2009 at 11:31:30 PM GMT+0', 'en', 'datetime', '1234567890'),
+ array('13. Februar 2009 um 23:31:30 GMT+0', 'de', 'datetime', '1234567890'),
+ array('February 13, 2009', 'en', 'date', '1234567890'),
+ array('13. Februar 2009', 'de', 'date', '1234567890'),
+ array('11:31:30 PM GMT+0', 'en', 'time', '1234567890'),
+ array('23:31:30 GMT+0', 'de', 'time', '1234567890'),
+
+ // timestamp as int
+ array('February 13, 2009 at 11:31:30 PM GMT+0', 'en', 'datetime', 1234567890),
+ array('13. Februar 2009 um 23:31:30 GMT+0', 'de', 'datetime', 1234567890),
+ array('February 13, 2009', 'en', 'date', 1234567890),
+ array('13. Februar 2009', 'de', 'date', 1234567890),
+ array('11:31:30 PM GMT+0', 'en', 'time', 1234567890),
+ array('23:31:30 GMT+0', 'de', 'time', 1234567890),
+
+ // DateTime object
+ array('February 13, 2009 at 11:31:30 PM GMT+0', 'en', 'datetime', new DateTime('@1234567890')),
+ array('13. Februar 2009 um 23:31:30 GMT+0', 'de', 'datetime', new DateTime('@1234567890')),
+ array('February 13, 2009', 'en', 'date', new DateTime('@1234567890')),
+ array('13. Februar 2009', 'de', 'date', new DateTime('@1234567890')),
+ array('11:31:30 PM GMT+0', 'en', 'time', new DateTime('@1234567890')),
+ array('23:31:30 GMT+0', 'de', 'time', new DateTime('@1234567890')),
+
+ // en_GB
+ array('13 February 2009 at 23:31:30 GMT+0', 'en_GB', 'datetime', new DateTime('@1234567890')),
+ array('13 February 2009', 'en_GB', 'date', new DateTime('@1234567890')),
+ array('23:31:30 GMT+0', 'en_GB', 'time', new DateTime('@1234567890')),
+ array('13 February 2009 at 23:31:30 GMT+0', 'en-GB', 'datetime', new DateTime('@1234567890')),
+ array('13 February 2009', 'en-GB', 'date', new DateTime('@1234567890')),
+ array('23:31:30 GMT+0', 'en-GB', 'time', new DateTime('@1234567890')),
+ );
+ }
+
/**
- * Issue #4360: Do not call strtotime() on numeric strings.
+ * @dataProvider localizationDataProvider
*/
- public function testNumericStringToDateTime() {
+ public function testNumericStringLocalization($expectedDate, $lang, $type, $value) {
$l = new OC_L10N('test');
- $this->assertSame('February 13, 2009 23:31', $l->l('datetime', '1234567890'));
+ $l->forceLanguage($lang);
+ $this->assertSame($expectedDate, $l->l($type, $value));
+ }
+
+ public function firstDayDataProvider() {
+ return array(
+ array(1, 'de'),
+ array(0, 'en'),
+ );
}
- public function testNumericToDateTime() {
+ /**
+ * @dataProvider firstDayDataProvider
+ * @param $expected
+ * @param $lang
+ */
+ public function testFirstWeekDay($expected, $lang) {
$l = new OC_L10N('test');
- $this->assertSame('February 13, 2009 23:31', $l->l('datetime', 1234567890));
+ $l->forceLanguage($lang);
+ $this->assertSame($expected, $l->l('firstday', 'firstday'));
}
/**
diff --git a/tests/lib/setup.php b/tests/lib/setup.php
new file mode 100644
index 00000000000..2c1569dd800
--- /dev/null
+++ b/tests/lib/setup.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+use OCP\IConfig;
+
+class Test_OC_Setup extends PHPUnit_Framework_TestCase {
+
+ /** @var IConfig */
+ protected $config;
+ /** @var \OC_Setup */
+ protected $setupClass;
+
+ public function setUp() {
+ $this->config = $this->getMock('\OCP\IConfig');
+ $this->setupClass = $this->getMock('\OC_Setup', array('class_exists', 'is_callable'), array($this->config));
+ }
+
+ public function testGetSupportedDatabasesWithOneWorking() {
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue(
+ array('sqlite', 'mysql', 'oci')
+ ));
+ $this->setupClass
+ ->expects($this->once())
+ ->method('class_exists')
+ ->will($this->returnValue(true));
+ $this->setupClass
+ ->expects($this->exactly(2))
+ ->method('is_callable')
+ ->will($this->returnValue(false));
+ $result = $this->setupClass->getSupportedDatabases();
+ $expectedResult = array(
+ 'sqlite' => 'SQLite'
+ );
+
+ $this->assertSame($expectedResult, $result);
+ }
+
+ public function testGetSupportedDatabasesWithNoWorking() {
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue(
+ array('sqlite', 'mysql', 'oci', 'pgsql')
+ ));
+ $this->setupClass
+ ->expects($this->once())
+ ->method('class_exists')
+ ->will($this->returnValue(false));
+ $this->setupClass
+ ->expects($this->exactly(3))
+ ->method('is_callable')
+ ->will($this->returnValue(false));
+ $result = $this->setupClass->getSupportedDatabases();
+
+ $this->assertSame(array(), $result);
+ }
+
+ public function testGetSupportedDatabasesWitAllWorking() {
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue(
+ array('sqlite', 'mysql', 'pgsql', 'oci', 'mssql')
+ ));
+ $this->setupClass
+ ->expects($this->once())
+ ->method('class_exists')
+ ->will($this->returnValue(true));
+ $this->setupClass
+ ->expects($this->exactly(4))
+ ->method('is_callable')
+ ->will($this->returnValue(true));
+ $result = $this->setupClass->getSupportedDatabases();
+ $expectedResult = array(
+ 'sqlite' => 'SQLite',
+ 'mysql' => 'MySQL/MariaDB',
+ 'pgsql' => 'PostgreSQL',
+ 'oci' => 'Oracle',
+ 'mssql' => 'MS SQL'
+ );
+ $this->assertSame($expectedResult, $result);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Supported databases are not properly configured.
+ */
+ public function testGetSupportedDatabaseException() {
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->will($this->returnValue('NotAnArray'));
+ $this->setupClass->getSupportedDatabases();
+ }
+} \ No newline at end of file
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
index 50ce24e07b6..61b8f262a42 100644
--- a/tests/lib/share/backend.php
+++ b/tests/lib/share/backend.php
@@ -29,9 +29,10 @@ class Test_Share_Backend implements OCP\Share_Backend {
private $testItem1 = 'test.txt';
private $testItem2 = 'share.txt';
+ private $testId = 1;
public function isValidSource($itemSource, $uidOwner) {
- if ($itemSource == $this->testItem1 || $itemSource == $this->testItem2) {
+ if ($itemSource == $this->testItem1 || $itemSource == $this->testItem2 || $itemSource == 1) {
return true;
}
}
diff --git a/tests/lib/tags.php b/tests/lib/tags.php
index 976b4b4fdc8..57b64f1cd36 100644
--- a/tests/lib/tags.php
+++ b/tests/lib/tags.php
@@ -34,7 +34,8 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
$this->objectType = uniqid('type_');
OC_User::createUser($this->user, 'pass');
OC_User::setUserId($this->user);
- $this->tagMgr = new OC\TagManager($this->user);
+ $this->tagMapper = new OC\Tagging\TagMapper(\OC::$server->getDb());
+ $this->tagMgr = new OC\TagManager($this->tagMapper, $this->user);
}
@@ -84,7 +85,36 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
$this->assertTrue($tagger->hasTag($tag));
}
- $this->assertCount(4, $tagger->getTags(), 'Not all tags added');
+ $tagMaps = $tagger->getTags();
+ $this->assertCount(4, $tagMaps, 'Not all tags added');
+ foreach($tagMaps as $tagMap) {
+ $this->assertEquals(null, $tagMap['id']);
+ }
+
+ // As addMultiple has been called without $sync=true, the tags aren't
+ // saved to the database, so they're gone when we reload $tagger:
+
+ $tagger = $this->tagMgr->load($this->objectType);
+ $this->assertEquals(0, count($tagger->getTags()));
+
+ // Now, we call addMultiple() with $sync=true so the tags will be
+ // be saved to the database.
+ $result = $tagger->addMultiple($tags, true);
+ $this->assertTrue((bool)$result);
+
+ $tagMaps = $tagger->getTags();
+ foreach($tagMaps as $tagMap) {
+ $this->assertNotEquals(null, $tagMap['id']);
+ }
+
+ // Reload the tagger.
+ $tagger = $this->tagMgr->load($this->objectType);
+
+ foreach($tags as $tag) {
+ $this->assertTrue($tagger->hasTag($tag));
+ }
+
+ $this->assertCount(4, $tagger->getTags(), 'Not all previously saved tags found');
}
public function testIsEmpty() {
@@ -120,8 +150,8 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
$this->assertTrue($tagger->rename('Wrok', 'Work'));
$this->assertTrue($tagger->hasTag('Work'));
$this->assertFalse($tagger->hastag('Wrok'));
- $this->assertFalse($tagger->rename('Wrok', 'Work'));
-
+ $this->assertFalse($tagger->rename('Wrok', 'Work')); // Rename non-existant tag.
+ $this->assertFalse($tagger->rename('Work', 'Family')); // Collide with existing tag.
}
public function testTagAs() {
@@ -160,7 +190,33 @@ class Test_Tags extends PHPUnit_Framework_TestCase {
public function testFavorite() {
$tagger = $this->tagMgr->load($this->objectType);
$this->assertTrue($tagger->addToFavorites(1));
+ $this->assertEquals(array(1), $tagger->getFavorites());
$this->assertTrue($tagger->removeFromFavorites(1));
+ $this->assertEquals(array(), $tagger->getFavorites());
+ }
+
+ public function testShareTags() {
+ $test_tag = 'TestTag';
+ OCP\Share::registerBackend('test', 'Test_Share_Backend');
+
+ $tagger = $this->tagMgr->load('test');
+ $tagger->tagAs(1, $test_tag);
+
+ $other_user = uniqid('user2_');
+ OC_User::createUser($other_user, 'pass');
+
+ OC_User::setUserId($other_user);
+ $other_tagMgr = new OC\TagManager($this->tagMapper, $other_user);
+ $other_tagger = $other_tagMgr->load('test');
+ $this->assertFalse($other_tagger->hasTag($test_tag));
+
+ OC_User::setUserId($this->user);
+ OCP\Share::shareItem('test', 1, OCP\Share::SHARE_TYPE_USER, $other_user, OCP\PERMISSION_READ);
+
+ OC_User::setUserId($other_user);
+ $other_tagger = $other_tagMgr->load('test', array(), true); // Update tags, load shared ones.
+ $this->assertTrue($other_tagger->hasTag($test_tag));
+ $this->assertContains(1, $other_tagger->getIdsForTag($test_tag));
}
}
diff --git a/tests/lib/templatelayout.php b/tests/lib/templatelayout.php
new file mode 100644
index 00000000000..0335c7c88ee
--- /dev/null
+++ b/tests/lib/templatelayout.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Test;
+
+/**
+ * @package OC\Test
+ */
+class OC_TemplateLayout extends \PHPUnit_Framework_TestCase {
+
+ private $oldServerUri;
+ private $oldScriptName;
+
+ public function setUp() {
+ $this->oldServerURI = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;
+ $this->oldScriptName = $_SERVER['SCRIPT_NAME'];
+ }
+
+ public function tearDown() {
+ if ($this->oldServerURI === null) {
+ unset($_SERVER['REQUEST_URI']);
+ } else {
+ $_SERVER['REQUEST_URI'] = $this->oldServerURI;
+ }
+ $_SERVER['SCRIPT_NAME'] = $this->oldScriptName;
+ }
+
+ /**
+ * Contains valid file paths in the scheme array($absolutePath, $expectedPath)
+ * @return array
+ */
+ public function validFilePathProvider() {
+ return array(
+ array(\OC::$SERVERROOT . '/apps/files/js/fancyJS.js', '/apps/files/js/fancyJS.js'),
+ array(\OC::$SERVERROOT. '/test.js', '/test.js'),
+ array(\OC::$SERVERROOT . '/core/test.js', '/core/test.js'),
+ array(\OC::$SERVERROOT, ''),
+ );
+ }
+
+ /**
+ * @dataProvider validFilePathProvider
+ */
+ public function testConvertToRelativePath($absolutePath, $expected) {
+ $_SERVER['REQUEST_URI'] = $expected;
+ $_SERVER['SCRIPT_NAME'] = '/';
+
+ $relativePath = \Test_Helper::invokePrivate(new \OC_TemplateLayout('user'), 'convertToRelativePath', array($absolutePath));
+ $this->assertEquals($expected, $relativePath);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage $filePath is not under the \OC::$SERVERROOT
+ */
+ public function testInvalidConvertToRelativePath() {
+ $invalidFile = '/this/file/is/invalid';
+ $_SERVER['REQUEST_URI'] = $invalidFile;
+ $_SERVER['SCRIPT_NAME'] = '/';
+
+ \Test_Helper::invokePrivate(new \OC_TemplateLayout('user'), 'convertToRelativePath', array($invalidFile));
+ }
+}
diff --git a/tests/lib/tempmanager.php b/tests/lib/tempmanager.php
new file mode 100644
index 00000000000..f16fbce2c7c
--- /dev/null
+++ b/tests/lib/tempmanager.php
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+use OC\Log;
+
+class NullLogger extends Log {
+ public function __construct($logger = null) {
+ //disable original constructor
+ }
+
+ public function log($level, $message, array $context = array()) {
+ //noop
+ }
+}
+
+class TempManager extends \PHPUnit_Framework_TestCase {
+ protected $baseDir;
+
+ public function setUp() {
+ $this->baseDir = get_temp_dir() . '/oc_tmp_test';
+ if (!is_dir($this->baseDir)) {
+ mkdir($this->baseDir);
+ }
+ }
+
+ public function tearDown() {
+ \OC_Helper::rmdirr($this->baseDir);
+ }
+
+ /**
+ * @param \Psr\Log\LoggerInterface $logger
+ * @return \OC\TempManager
+ */
+ protected function getManager($logger = null) {
+ if (!$logger) {
+ $logger = new NullLogger();
+ }
+ return new \OC\TempManager($this->baseDir, $logger);
+ }
+
+ public function testGetFile() {
+ $manager = $this->getManager();
+ $file = $manager->getTemporaryFile('.txt');
+ $this->assertStringEndsWith('.txt', $file);
+ $this->assertTrue(is_file($file));
+ $this->assertTrue(is_writable($file));
+
+ file_put_contents($file, 'bar');
+ $this->assertEquals('bar', file_get_contents($file));
+ }
+
+ public function testGetFolder() {
+ $manager = $this->getManager();
+ $folder = $manager->getTemporaryFolder();
+ $this->assertStringEndsWith('/', $folder);
+ $this->assertTrue(is_dir($folder));
+ $this->assertTrue(is_writable($folder));
+
+ file_put_contents($folder . 'foo.txt', 'bar');
+ $this->assertEquals('bar', file_get_contents($folder . 'foo.txt'));
+ }
+
+ public function testCleanFiles() {
+ $manager = $this->getManager();
+ $file1 = $manager->getTemporaryFile('.txt');
+ $file2 = $manager->getTemporaryFile('.txt');
+ $this->assertTrue(file_exists($file1));
+ $this->assertTrue(file_exists($file2));
+
+ $manager->clean();
+
+ $this->assertFalse(file_exists($file1));
+ $this->assertFalse(file_exists($file2));
+ }
+
+ public function testCleanFolder() {
+ $manager = $this->getManager();
+ $folder1 = $manager->getTemporaryFolder();
+ $folder2 = $manager->getTemporaryFolder();
+ touch($folder1 . 'foo.txt');
+ touch($folder1 . 'bar.txt');
+ $this->assertTrue(file_exists($folder1));
+ $this->assertTrue(file_exists($folder2));
+ $this->assertTrue(file_exists($folder1 . 'foo.txt'));
+ $this->assertTrue(file_exists($folder1 . 'bar.txt'));
+
+ $manager->clean();
+
+ $this->assertFalse(file_exists($folder1));
+ $this->assertFalse(file_exists($folder2));
+ $this->assertFalse(file_exists($folder1 . 'foo.txt'));
+ $this->assertFalse(file_exists($folder1 . 'bar.txt'));
+ }
+
+ public function testCleanOld() {
+ $manager = $this->getManager();
+ $oldFile = $manager->getTemporaryFile('.txt');
+ $newFile = $manager->getTemporaryFile('.txt');
+ $folder = $manager->getTemporaryFolder();
+ $nonOcFile = $this->baseDir . '/foo.txt';
+ file_put_contents($nonOcFile, 'bar');
+
+ $past = time() - 2 * 3600;
+ touch($oldFile, $past);
+ touch($folder, $past);
+ touch($nonOcFile, $past);
+
+ $manager2 = $this->getManager();
+ $manager2->cleanOld();
+ $this->assertFalse(file_exists($oldFile));
+ $this->assertFalse(file_exists($folder));
+ $this->assertTrue(file_exists($nonOcFile));
+ $this->assertTrue(file_exists($newFile));
+ }
+
+ public function testLogCantCreateFile() {
+ $logger = $this->getMock('\Test\NullLogger');
+ $manager = $this->getManager($logger);
+ chmod($this->baseDir, 0500);
+ $logger->expects($this->once())
+ ->method('warning')
+ ->with($this->stringContains('Can not create a temporary file in directory'));
+ $this->assertFalse($manager->getTemporaryFile('.txt'));
+ }
+
+ public function testLogCantCreateFolder() {
+ $logger = $this->getMock('\Test\NullLogger');
+ $manager = $this->getManager($logger);
+ chmod($this->baseDir, 0500);
+ $logger->expects($this->once())
+ ->method('warning')
+ ->with($this->stringContains('Can not create a temporary folder in directory'));
+ $this->assertFalse($manager->getTemporaryFolder());
+ }
+}
diff --git a/tests/lib/user/user.php b/tests/lib/user/user.php
index 3f90432c6b0..7a1db861c98 100644
--- a/tests/lib/user/user.php
+++ b/tests/lib/user/user.php
@@ -32,6 +32,28 @@ class User extends \PHPUnit_Framework_TestCase {
$this->assertEquals('Foo', $user->getDisplayName());
}
+ /**
+ * if the display name contain whitespaces only, we expect the uid as result
+ */
+ public function testDisplayNameEmpty() {
+ /**
+ * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->getMock('\OC_User_Backend');
+ $backend->expects($this->once())
+ ->method('getDisplayName')
+ ->with($this->equalTo('foo'))
+ ->will($this->returnValue(' '));
+
+ $backend->expects($this->any())
+ ->method('implementsActions')
+ ->with($this->equalTo(\OC_USER_BACKEND_GET_DISPLAYNAME))
+ ->will($this->returnValue(true));
+
+ $user = new \OC\User\User('foo', $backend);
+ $this->assertEquals('foo', $user->getDisplayName());
+ }
+
public function testDisplayNameNotSupported() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
@@ -305,6 +327,30 @@ class User extends \PHPUnit_Framework_TestCase {
$this->assertEquals('Foo',$user->getDisplayName());
}
+ /**
+ * don't allow display names containing whitespaces only
+ */
+ public function testSetDisplayNameEmpty() {
+ /**
+ * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+ */
+ $backend = $this->getMock('\OC_User_Database');
+
+ $backend->expects($this->any())
+ ->method('implementsActions')
+ ->will($this->returnCallback(function ($actions) {
+ if ($actions === \OC_USER_BACKEND_SET_DISPLAYNAME) {
+ return true;
+ } else {
+ return false;
+ }
+ }));
+
+ $user = new \OC\User\User('foo', $backend);
+ $this->assertFalse($user->setDisplayName(' '));
+ $this->assertEquals('foo',$user->getDisplayName());
+ }
+
public function testSetDisplayNameNotSupported() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
diff --git a/tests/lib/util.php b/tests/lib/util.php
index 600b794d8b8..9a3185b3f79 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -29,7 +29,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
date_default_timezone_set("UTC");
$result = OC_Util::formatDate(1350129205);
- $expected = 'October 13, 2012 11:53';
+ $expected = 'October 13, 2012 at 11:53:25 AM GMT+0';
$this->assertEquals($expected, $result);
$result = OC_Util::formatDate(1102831200, true);
@@ -41,7 +41,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
date_default_timezone_set("UTC");
$result = OC_Util::formatDate(1350129205, false, 'Europe/Berlin');
- $expected = 'October 13, 2012 13:53';
+ $expected = 'October 13, 2012 at 1:53:25 PM GMT+0';
$this->assertEquals($expected, $result);
}
@@ -57,7 +57,7 @@ class Test_Util extends PHPUnit_Framework_TestCase {
\OC::$server->getSession()->set('timezone', 3);
$result = OC_Util::formatDate(1350129205, false);
- $expected = 'October 13, 2012 14:53';
+ $expected = 'October 13, 2012 at 2:53:25 PM GMT+0';
$this->assertEquals($expected, $result);
}
diff --git a/tests/settings/controller/mailsettingscontrollertest.php b/tests/settings/controller/mailsettingscontrollertest.php
index 5a1add95449..ff3d1d93a1b 100644
--- a/tests/settings/controller/mailsettingscontrollertest.php
+++ b/tests/settings/controller/mailsettingscontrollertest.php
@@ -169,8 +169,8 @@ class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase {
'A problem occurred while sending the e-mail. Please revisit your settings.'),
array('Email sent', array(), 'Email sent'),
array('test email settings', array(), 'test email settings'),
- array('If you received this email, the settings seems to be correct.', array(),
- 'If you received this email, the settings seems to be correct.')
+ array('If you received this email, the settings seem to be correct.', array(),
+ 'If you received this email, the settings seem to be correct.')
)
));
$this->container['UserSession']
@@ -193,4 +193,4 @@ class MailSettingscontrollerTest extends \PHPUnit_Framework_TestCase {
$this->assertSame($expectedResponse, $response);
}
-} \ No newline at end of file
+}